hosoo 发表于 2015-1-23 18:09:53

溢出问题

本帖最后由 hosoo 于 2015-1-23 19:32 编辑

mov al,10h
add al,90h
al进行有符号运算结果OF为多少?





Lyk 发表于 2015-1-23 18:09:54

楼主,这问题有点看不懂,前两句我想你是肯定明白什么意思的,你说的有符号运算是关于正负的问题?
在cpu只有或和与运算,他不管你是什么加减乘除,至于到底翻译出什么是编译器说的算吧? 他会进行一个
转换,比如C++中 +号等本身也算是一个函数,底层有换算。

hosoo 发表于 2015-1-26 09:22:11

Lyk 发表于 2015-1-23 22:13
楼主,这问题有点看不懂,前两句我想你是肯定明白什么意思的,你说的有符号运算是关于正负的问题?
在cpu ...

这是汇编第十一章的内容监测11.2的问题,我知道怎么算,但是就这一个算出来的OF结果和答案不一致,所以问问论坛里的前辈,怎么计算的。

hosoo 发表于 2015-1-26 09:22:53

本帖最后由 hosoo 于 2015-1-26 09:33 编辑

hosoo 发表于 2015-1-26 09:22
这是汇编第十一章的内容监测11.2的问题,我知道怎么算,但是就这一个算出来的OF结果和答案不一致,所以问 ...
我是这样计算的
无符号运算:10H+90H=A0H (1010 0000B) 从二进制上看 CF是等于0的
有符号运算:(-10H)+(-90H)=F0H+70H=160H (0001 0110 0000B)
因为AL为1字节 那么无符号AL=A0H 有符号AL=60H 从二进制看出结果已经溢出了所以OF=1的
但是答案给出的OF值却为0,所以不明白。知道的前辈指点一下,谢谢!

lqjstc 发表于 2015-1-28 17:47:35

符号位我也一直搞不明白,MARK一下。

lixiaoshuai 发表于 2015-2-7 17:47:45

同求解释,☆⌒(*^-゜)v THX!!

老师 发表于 2015-2-7 19:33:53

有点忘记了那个标记寄存器的知识了,不过楼主我给你讲一下我自己学这个的时候所总结出来的东西,希望对你有帮助。
    首先呢,你上面说的是al也就是说是8位的,我们知道8位的范围应该是0到FF(无符号的)也就是十进制的0到255共256个数字,而256/2=128,所以呢就分给了正数和负数,这样就有了8位的负数范围为【-128,0)正数的范围为(0,127】如果是十六进制的话就是【80,FF】和【1,7F】(注意十六进制的我没有算0)
    这样一来,如果两个8位的十六进制的数想家的和超过7F,那么就是负数了,这样OF位应该就是,额,什么来着忘记了,应该是1吧没记错的话。。。。。
    希望可以帮到你

老师 发表于 2015-2-7 19:41:59

比冲一下,多用微软的计算器

小靚同学Leon 发表于 2015-2-8 12:08:03

擅用论坛的搜索功能,这种问题之前我有过详细的解答。

傲天 发表于 2015-2-27 00:55:51

8位的有符号数是-128到+127,10H就是16,不可能是负值,90H是144超过了127,所以应该是负的112,所以相加应该还是负值,就是+16+(-122),结果为-96也就是A0,所以溢出标志位应该为0,也就是说没有溢出。

丝雨人 发表于 2015-5-26 20:45:35

按有符号数算,10H是16    90H是-16相加等于0.      溢出指的是超出八位所能表示的范围,意思就是如果计算结果小于-128   大于127(内存中数据都是以补码形式存放的)就会产生溢出,有点像CF是第九位,溢出的那位被放在了第九位。 比如-126   -   5   =   -131   在内存中的存放形式是(1)00000011,则溢出,结果取反。

Loading.... 发表于 2015-6-18 19:43:09


看看而已

jies147 发表于 2015-7-2 15:30:05

10H:0001 0000B,最高位(符号位)是0,表示这个数是正数,次高位(符号数的数值最高位)为0
90H:1001 0000B,最高位(符号位)是1,表示这个数是负数,次高位(符号数的数值最高位)为0
0001 0000B+1001 0000B=1010 0000B,相加的结果是次高位没有向符号位(最高位)进位,所以没有溢出。

ollydebug 发表于 2015-7-3 18:24:39

楼上正解,顺便说一句都是补码
页: [1]
查看完整版本: 溢出问题