415968430 发表于 2012-1-19 15:35:20

检测点11.2不懂啊。。谁教下

fishc里课后习题:
mov al,80h   
add al,80h以后
怎么会:CF       OF       SF       ZF       PF
             1         1          0         1         1
CF进位我知道。但是1000 0000+1000 0000为什么会有溢出呢?倒数第二位不是都是0吗0000000+0000000这样算错吗?不懂

再是mov al,0fch
add al,5h
也就是
11111100+101
CF       OF       SF       ZF       PF
1         0          0         0         0
又怎么会没有溢出呢?我感觉有额


谁教教啊~~

小马过河 发表于 2012-1-20 11:25:50

二进制   1000 0000b等于 16进制   80H   因为最高位(第七位)为1    为有符号数      所以就等于-128      -128 + -128 = -256    已超出字节存储有符号数的范围(   -128   ~   +127   ) 所以溢出0f=1

第二个 al = 0fch =--4D         5h =+ 5d   所以-4 + 5= 1   1没有超出字节有符号数的存储范围,所以of=0

415968430 发表于 2012-1-20 11:36:53

小马过河 发表于 2012-1-20 11:25 static/image/common/back.gif
二进制   1000 0000b等于 16进制   80H   因为最高位(第七位)为1    为有符号数      所以就等于-128 ...

{:5_107:}为什么最高为为1就是有符号数呢?有无符号不是说看SF的值吗?
那凡是最高位为1就是有符号数又是负数。
最高位为0是无符号数为正数,这压根好像不对额。。
能将清楚点吗

ever.g 发表于 2012-1-20 12:12:43

本帖最后由 ever.g 于 2012-1-20 12:52 编辑

当你关心运算结果有无符号时,去看符号位,和有无溢出。。
不关心可以无视,内存中的数据存储方式是不会变的
关于溢出80h 换成10进制是-128?-128+-128   有进位 但是结果al中变成了0很明显当作有符号运算结果不对所以产生溢出

同理0100 0000+0100 0000 = 1000 0000 即64+64 = 128没有进位,但是结果当作有符号数就为-128了,结果明显是不对的
产生溢出! 所以异号相加 不会溢出,同号相加就要考虑溢出问题了,当然这是针对有符号运算的,你当作无符号就可以不考虑

小马过河 发表于 2012-1-20 12:36:13

415968430 发表于 2012-1-20 11:36 static/image/common/back.gif
为什么最高为为1就是有符号数呢?有无符号不是说看SF的值吗?
那凡是最高位为1就是有符号数又是 ...

你看 OF 时 所有数据都是有符号数你不看OF时 所有数据都为无符号数   

415968430 发表于 2012-1-20 13:38:02

小马过河 发表于 2012-1-20 12:36 static/image/common/back.gif
你看 OF 时 所有数据都是有符号数你不看OF时 所有数据都为无符号数

哦哦 {:5_109:}
页: [1]
查看完整版本: 检测点11.2不懂啊。。谁教下