飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2639|回复: 3

浅谈汇编中的几个标志寄存器

[复制链接]

该用户从未签到

发表于 2016-5-9 19:21:34 | 显示全部楼层 |阅读模式
这两天用到标志寄存器,发现之前写的汇编学习笔记混乱,所以现在重新阐述一下:
内存中的数据可以作为有符号数也可以作为无符号数来使用。我们比较内存中的两个数值,一定是以下三种结果:

一、相等情况:
A - B = 0 ; 我们用标志位 ZF 来记录结果,如果(比较)结果为0 则设置 ZF=1,反之设置 ZF=0;

二、不等情况:
A - B > 0 或者 A - B < 0
我们只讨论大于情况,因为小于情况条件取反即可。

1. 若 A 和 B 为无符号数
0x60 - 0x20 = 0x40 无需借位
0x20 - 0x60 = 0xC0 借位(0x120 - 0x60 = 0xC0)
若无借位,CF = 0,则则可判断 A > B

2. 若 A 和 B 为有符号数
0x50 - 0x30 = 0x20 结果为正,是否可以判断其大小?
0x50 - (-0x80)= 0xD0
0xD0 ==> 1101 0000 最高(左)位为1,为负数 SF=1
负数变正数的算法是取反后+1,即0010 1111 + 1 = 0011 0000 = 30
0x50 - (-0x80)= -0x30 即十进制 -48
正数A - 负数B,肯定是 A > B ,但是从结果来看,结果为负数,所以结果的正负就不能判断有符号数 A 和 B 的大小了。

那什么情况下会出现溢出这种情况呢:
超过上限:正 - 负 (正 + 正)
超过下限:负 - 正 (负 + 负)
那我们来统计一下:
溢出(1) 正负
OF=0   SF=0(正0)  ==> A > B
OF=0   SF=1(负1)  ==> A < B
OF=1   SF=1(正-负)  ==> A > B
OF=1   SF=0(负-正)  ==> A < B

所以,对于两个不相等的有符号数,当 SF = OF 时, A > B ,当 SF != OF 时, A < B  。

综上所述,这就是 ZF,CF,SF,OF 四个标志寄存器存在即合理的由来,相信你对其也有了更本质的了解。

PYG19周年生日快乐!
  • TA的每日心情
    擦汗
    2021-1-26 09:24
  • 签到天数: 276 天

    [LV.8]以坛为家I

    发表于 2016-5-9 19:23:14 | 显示全部楼层
    学习学习 谢谢了
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2019-10-28 10:17
  • 签到天数: 718 天

    [LV.9]以坛为家II

    发表于 2016-5-9 19:27:50 | 显示全部楼层
    简单易懂,感谢校长
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表