(最详细!)汇编原理中OF(溢出)和CF(进位)的判断方法

关于这个问题百度查了半天,都没有比较全面的解释,所以我来了!

  • 首先我们需要知道,al是用两位16进制的数来保存数据的, 所以正数最多保存0~255(十进制),FFH

  • 处理器内部以补码表示有符号数,8个二进制位能够表达的整数范围是:+127 ~ -128

那么补码怎么求呢?
如下:

  • 正数的补码就是其本身

  • 负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)

    [+1] = [00000001]原 = [00000001]反 = [00000001]补
    
    [-1] = [10000001]原 = [11111110]反 = [11111111]补
    

一定要注意,正数的补码是他本身,我身边很多人搞不懂下面这玩意,都是因为忘了正数的补码就是本身,然后傻乎乎的用负数方法去求正数补码

例1:
3AH + 7CH=B6H
无符号数运算:58+124=182,范围内,无进位(<255)
有符号数运算: 58+124=182 ,范围外,有溢出(>127)

例2:AAH + 7CH=(1)26H
无符号数运算:170+124=294,范围外,有进位(>255)
有符号数运算:-86+124=28 ,范围内,无溢出(-128<28<127)

上面有符号运算里,58和-86不知道怎么来的同学不要急,
接着往下看:

再来说说书上的例子:
这里是王爽的《汇编语言(第三版)》P218

  • mov al,0F0H 240(十进制)
  • add al,88H 136(十进制)
  • 无符号运算:al=240+136=376>255 所以有进位,CF=1
    有符号运算:al=-16-120=-136<-128所以有溢出,OF=1
  • mov al,0F0H 240(十进制)
  • add al,78H 120(十进制)
  • 无符号运算:al=240+120=360>255 所以有进位,CF=1
    有符号运算:al=-16+120=104,-128<104<127 所以无溢出,OF=0

具体的计算过程如下:
在这里插入图片描述
看懂书上这个例子就差不多了,
然后我们再带入之前的那个例子根据步骤计算,不难得到58和-86的值

就是这么简单


  • 33
    点赞
  • 163
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值