当前位置:网站首页 > 技术博客 > 正文

标志位v



标志位简介:

标志寄存器,又称程序状态寄存器(它的内容是Program Status Word,PSW).这是一个存放条件码标志,控制标志和系统标志的寄存器.


6个状态标志位

CF—进位标志,加法时的最高位(D7或D15)产生进位或减法时最高位出现借位,则CF=1,否则CF=0;

AF—辅助进位标志,供BCD码使用。当D3位出现进位或借位时AF=1,否则AF=0;

OF—溢出标志,带符号数进行算术运算时,其结果超出了8位或16位的表示范围,产生溢出,则OF=1,否则OF=0;

 

ZF—零标志,运算结果各位都为零,则ZF=1,否则ZF=0;

SF—符号标志,运算结果为负数时,即运算结果的最高位为1,则SF=1,否则SF=0;

PF—奇偶标志,反映操作结果中“1”的个数的情况,若有偶数个“1”,则PF=1,否则PF=0。

3个控制标志位

DF—方向标志,用来控制数据串操作指令的步进方向;
当设置DF=1时,将以递减顺序对数据串中的数据进行处理。当设置DF=0时,递增。

IF—中断允许标志,当设置IF=1,开中断,CPU可响应可屏蔽中断请求;当设置IF=0时,关中断,CPU不响应可屏蔽中断请求。

TF—陷阱标志,为程序调试而设的。当设置TF=1,CPU处于单步执行指令的方式;当设置TF=0时,CPU正常执行程序。

即CF = 1;否则CF= 0。

49H + 6DH=B6H, 没有进位:CF = 0

BBH + 6AH=(1)25H,有进位:CF = 1

49H + 6DH=B6H,结果不是零:ZF = 0

75H + 8BH=(1)00H,结果是零:ZF = 1

49H + 6DH=B6H=B,SF=1

 

3AH + 7CH=B6H=B结果中有5个1,是奇数:PF = 0

49H + 6DH =B6H,产生溢出:OF = 1

75H + 8BH =(1)26H,没有溢出:OF = 0

 

什么是溢出?

处理器内部以补码表示有符号数8位表达的整数范围是:+127~-128

16位表达的范围是:+32767~-32768

如果运算结果超出这个范围,就产生了溢出有溢出,说明有符号数的运算结果不正确49H+6DH=B6H,就是73+109=182,已经超出-128~+127范围,产生溢出,故OF=1;

另一方面,补码B6H表达真值是-74,显然运算结果也不正确

溢出标志OF和进位标志CF是两个意义不同的标志

溢出标志表示有符号数运算结果是否超出范围,运算结果已经不正确。

例1:49H +6DH=B6H无符号数运算:

73+109=182范围内,

无进位有符号数运算:73+109=182范围外,有溢出

例2:BBH +6AH=(1)25H无符号数运算:

187+106=293范围外,

有进位有符号数运算:-69+106=37范围内,无溢出

溢出的判断判断运算结果是否溢出有一个简单的规则:

只有当两个相同符号数相加(包括不同符号数相减),而运算结果的符号与原数据符号相反时,产生溢出;因为,此时的运算结果显然不正确其他情况下,则不会产生溢出

1.当两个符号相同的数相加,结果的符号与之相反,则OF=1,否则OF=0.

2.当两个符号不同的数相减,结果的符号与减数相同,则OF=1,否则OF=0.

 

 

设置DF=1,存储器地址自动减少。

CLD指令复位方向标志:DF=0

STD指令置位方向标志:DF=1

 

设置IF=1,则允许中断;

设置IF=0,则禁止中断。

CLI指令复位中断标志:IF=0

STI指令置位中断标志:IF=1

 

设置TF=0,处理器正常工作;

设置TF=1,处理器单步执行指令。

标志

值为1

值为0

OF

OV

NV

DF

DN

UP

IF

EI

DI

SF

NG

PL

ZF

ZR

NZ

AF

AC

NA

PF

PE

PO

CF

CY

NC



 



cmp指令
 cmp ax,bx
 如果(ax)=(bx), 则 zf=1
 如果(ax)!=(bx), 则 zf=0
 如果(ax)<(bx), 则 cf=1
 如果(ax)>=(bx),则 cf=0
 如果(ax)>(bx), 则 cf=0且zf=0
 如果(ax)<=(bx),则 cf=1或zf=1
cmp指令配合和条件转移指令配合使用
 条件转移指令

指令

含义

检测的相关标志位

je

等于则转移

zf=1

jne

不等于则转移

zf=0

jb

小于则转移

cf=1

jnb

不小于则转移

cf=0

ja

大于则转移

cf=0且zf=0

jna

不大于则转移

cf=1且zf=1



 DF标志和串传送指令
 DF 方向标志位,在串处理指令中,控制每次操作后si、di的增减
 df=0 每次操作后si、di递增
 df=1 每次操作后si、di递减
 movsb:
 相当于
 mov es:[di],byte ptr ds:[si]
 如果 df=0
 inc di
 inc si
 如果 df=1
 dec di
 dec si
 movsw:
 相当于
 mov es:[di],word ptr ds:[si]
 如果 df=0
 add si,2
 add di,2
 如果 df=1
 sub si,2
 sub di,2
 一般来说,movsb和movsw都和rep配合使用,格式如下:
 rep movsb
 或者
 rep movsw
 相当于
 s:movsb
 loop s
 rep的作用是根据cx的值,重复执行rep后面的串传送指令

 

版权声明


相关文章:

  • c语言如何给结构体数组赋值2024-12-02 16:01:01
  • sql渗透原理2024-12-02 16:01:01
  • 计算机发展历程简介2024-12-02 16:01:01
  • buttons css2024-12-02 16:01:01
  • linux usb设备2024-12-02 16:01:01
  • 代码设计思路 示例2024-12-02 16:01:01
  • mq消息中间件有哪些2024-12-02 16:01:01
  • sql游标的使用方法代码2024-12-02 16:01:01
  • crc16校验算法ccitt2024-12-02 16:01:01
  • python怎么调用py文件2024-12-02 16:01:01