汇编语言常用的标志寄存器

如下6个状态标志位

 1O标志(溢出标志) (OverFlow Flag)

O标志表示溢出。溢出位是用来表示带符号数的运算结果超出有限字长的表示范围的标志。它是根据两个操作数的符号及其变化来设置的。如两个操作数符号相同而运算结果的符号与之相反时 则O标志=1,反之,O标志=0。 如果两个符号相反的数 相加 不可能出现溢出

在32位汇编中  十六进制的2位 表示1byte   32位=8位十六进制的值

正数 0-7FFFFFFF 负数 80000000-FFFFFFFF(-1)

假设 EAX 的值改为 7FFFFFFF,即最大的正数。现在使其加 1 inc EAX,其和将超过最大正数,80000000对应的是一个负数

执行后  O标志被设置为 1


  2P 标志(奇偶标志)(Parity Flag)

如果指令的结果用二进制表示,该二进制数中的的 1 的总个数为偶数时,P 标志被设置1。例 如:101011001111000.


3) 标志(零标志)(Zero Flag)

当运算产生的结果为 时被设置。

ADD EAX1     先设置 EAX 的 值为 FFFFFFFF,即十进制-1,运行指令 ADD EAX使,结果为-1+1,等于 0

Z标志被设置1。

4)S标志(符号标志)(Sign Flag)

这个标志在运算结果为负时设置为 1

设置 mov EAX, FFFFFFF8   如果 inc,1 执行了运算并且结果是负数  S标志被设置了1  

   5)C 标志进位标志(Carry Flag)

  Cy位是进位位,用来表示本次无符号数运算结果的溢出溢出。由于无符号数的最高有效位只有数位意义而无符号意义,所以该位所产生的进位应该是本次运算结果的实际进位值。所以说:进位位Cy是在给定二进制数的位数范围内,代表了本次运算结果的溢出情况。另一方面,它所保存的进位值有时也是有用的。例如,双字长运算时,可以利用进位值把低位字的进位计入高位字。

无符号运算的结果)在超过最大数值时设置,可能是寄存器的值,例如,将EAX设为

FFFFFFFF,然后加 1,我们会看到,进位标志位设为1.   因为FFFFFFFF 已经是最大的8位16进制 在加1 超过了eax的最大值

比如 al是 0BBH 加入 0BBH =176 超过了al的1byte的限制 所有CF标志为1

6)A标志 辅助进位标志(Auxiliary Flag)

49H + 6DH=B6H,D3有进位:AF = 1
1001001+
1101101=

这里2进制中D3位也就是右边倒数第4位因为从0开始 也叫做低半字节 两个1 所以进位

这里详细解释下 C和O的区别

什么是位:33-16 个位减个位,十位减十位,3-6不够,那就要向十位的3借1
什么是位:再如16+17 个位回个位,十位加十位,6+7达上10了就要向十位进1


比如 用字节来说明 

比如 无符号位 也就是没有负数  

最大的无符号 数 就是  11111111=2的8次方 等于256 最小的为00000000 等于0

比如 按无符号数来相加

00001001+

01111000=10000001 

这里计算的结果为10000001 对于无符号来说 是 129小于256 没有进位 c标志0 

如果 11111111+1 结果变成 100000000 超过了1byte的8位 此时第9位被剔除  结果变成了0  这里第八位已经满2进1

了 这就表示 进位到 超过了 1byte的8位此时 就表示进位异常  c标志为1

还有借位出现异常情况下 c标志也会被置为1

减法 2-4

00000010-00000100 第三位为0不够减去1 往上借1位 一直到 第8位都没借到 所以 出现借位异常   c标志1

但是按照有符号来相加 最高位是符号位 0表示正数  最高位 为1 表示负数 (参考原码和补码 http://blog.csdn.net/liaomin416100569/article/details/7332897)

最大的数为 127 和最小数为 -128


 这里最高位 第8位是符号位 下面例子 第8位为0 表示两个正数相加

(+)00001001+

(+)01111000=10000001 

这里 两个正数相加后 最高位变成了 1 也就是变成了一个负数  此时 o标志1 表示溢出了



进位C和溢出O更详细区别 参考 http://blog.csdn.net/liaomin416100569/article/details/45166085

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值