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

2023-11-18

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

  • 首先我们需要知道,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的值

就是这么简单


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • Mac安装python3

    可以在命令行中输入 brew install python3 但是出现了error 如下所示 tar Error opening archive Failed to open Users my Library Caches Homebrew
  • springBoot自动装载原理

    springBoot自动装载原理 启动类的核心组合注解 SpringBootApplication 点进去看看 组成 SpringBootApplication注解的三个核心注解 SpringBootConfiguration 继承自 Co
  • 【MySQL】数据库高级查询:修改表、DML语句、DQL语句

    修改表 1 修改表名 ALTER TABLE 旧表名 RENAME TO 新表名 TO为可选参数 使用与否不影响结果 2 添加字段 ALTER TABLE 表名 ADD 字段名 数据类型 属性 3 修改字段 ALTER TABLE 表名 C

随机推荐