【详解】指令系统中跳转指令与OF,SF,CF,ZF的关系

目录

无符号跳转表示法

有符号跳转表示法

无符号跳转表示法详解

有符号跳转表示法详解


无符号跳转表示法

小于                 CF=1

大于等于         CF=0

小于等于        ​​CF + ZF = 1

大于                CF+ZF=0

有符号跳转表示法

小于                 SF\oplus OF = 1

大于等于         SF\oplus OF = 0

小于等于        (SF\oplus OF)+ZF = 1

大于                (SF\oplus OF)+ZF = 0

无符号跳转表示法详解

我在学习这部分的最大的困惑点就是 ZF 和 = 并不直接相关,彼此是交错的。

当然或许有人会说,不满足“小于”条件的自然是“大于等于”。既然“小于”是CF=0,那“大于等于”就是CF=1.然后“小于等于”时与ZF取“或”就好。

这样理解自然没有问题,也方便记忆。只要记住以“小于”为基点就可以推出剩下的关系式。

但问题就在于为什么是“小于”,而不是“大于”。

原因如下。

在无符号数减法“a-b”中,“CF=1”一定表示a不够减,a<b;但"CF=0"不一定表示a>b,还有可能是“a=b”。

更本质的关系可以从下面的推导中看出

a < bCF = 1, ZF = 0
a > bCF = 0, ZF = 0
a = bCF = 0, ZF = 1

在 a < b 中,根据卡诺图的规则,合并第二列的两项,CF = 1.(在卡诺图的规则中, “CF=1,OF=1" 的 “-” 项可以随意与 “1” 项合并,即表达式为 CF = 1.)

CF = 0CF = 1
ZF = 001
ZF = 10-

在 a > b 中,\bar{CF}\bar{ZF} = 1, 两边取反,即CF+ZF=0

CF = 0CF = 1
ZF = 010
ZF = 10-

在 a <= b 中,用卡诺图得出关系式,CF+ZF=1

CF = 0CF = 1
ZF = 001
ZF = 11-

在 a >= b 中,用卡诺图得出关系式,合并第一列的两项,CF = 0

CF = 0CF = 1
ZF = 010
ZF = 11-

有符号跳转表示法详解

相比于无符号数,有符号数稍微复杂,不过差别也只在于“CF”这一项变成了"OF,SF"这两项。从最开始的关系式看出SF\oplus OFCF的功能是完全等价的。换句话说,只要我们能证明OF\oplus SF = 1一定表示在有符号数减法“a-b”中,a不够减即可。

观察下表

a < b

a,b都为正,SF = 1, OF = 0, ZF = 0

a,b都为负,SF = 1, OF = 0, ZF = 0

a为负,b为正,SF = 1, OF = 0, ZF = 0(没溢出)

a为负,b为正,SF = 0, OF = 1, ZF = 0(溢出)

a > b

a,b都为正,SF = 0, OF = 0, ZF = 0

a,b都为负,SF = 0, OF = 0, ZF = 0

a为正,b为负,SF = 1, OF = 1, ZF = 0(溢出)

a为正,b为负,SF = 0, OF = 0, ZF = 0(没溢出)

a = bSF = 0, OF = 0, ZF = 1

可以看出在所有可能的9种情况中,OF\oplus SF = 1是a<b的充要条件。因此可以用OF\oplus SF代替无符号中的CF

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值