检测点11.2关于答案的一点问题
mov al,10Hadd al,90H 这两行代码运行完之后为什么OF = 0??结果是al = A0 H,溢出了呀。
mov al,80H
add al,80H 为什么这两行代码运行完之后OF= 1??结果是100 H,产生进位,CF = 1, 此时al= 0,没有溢出呀。 汇编语言全忘了~{:10_250:}@无名侠 不要沉呀、。。。 救命!!!{:5_107:} CF是flag的第0位,进位标志位,记录无符号运算结果是否有进/借位,结果有进/借位时,SF=1
OF是flag的第11位,溢出标志位,记录有符号运算结果是否溢出,结果溢出时,OF=1
如果你看of标志位,又由于是对al八位寄存器进行操作。那么就要把他当成8位有符号的运算,先把他转换成二进制
10H的二进制是00010000(16)
90H的二进制是10010000,计算机都是以补码的形式保存,由于最高位是负数,所以要把他转换成原码,转换规则是符号位不变,减去1然后取反,得到11110000结果为-56,记住最高位是符号位。
16+(-56)=-40。属于-128-127之间,所以没有溢出,第二题,可以按照上面思路自己验证下
jackqk 发表于 2016-3-14 09:50
如果你看of标志位,又由于是对al八位寄存器进行操作。那么就要把他当成8位有符号的运算,先把他转换成二进 ...
90H你的补码计算错了,90H的原码:10010000,反码:11101111,补码+1:11110000,最高位是符号位,故-112,计算 16+(-112)=-96,没有溢出 jackqk 发表于 2016-3-14 09:50
如果你看of标志位,又由于是对al八位寄存器进行操作。那么就要把他当成8位有符号的运算,先把他转换成二进 ...
{:10_257:} {:10_249:}鱼币少, 燕子湖畔 发表于 2016-5-26 10:43
90H你的补码计算错了,90H的原码:10010000,反码:11101111,补码+1:11110000,最高位是符号位,故-11 ...
上面那货,害的我验算了半个多小时,都没算出他的结果,怎么算都是-112
页:
[1]