读书人

负数相加有关问题高手指教!

发布时间: 2012-03-15 11:50:38 作者: rapoo

负数相加问题,高手指教!!!!
最近在看汇编(王爽),有这样一个问题:有符号数都是以补码形式存放的,两个负数的符号位均为1,而cpu在做两数相加时,是不考虑是有符号或是无符号数的,有符号数是通过补码形式进行的运算。就是都是按无符号数进行安位相加的,cpu在做两数相加时即进行了有符号数相加又进行了无符号数相加,而运算结果是通过flag寄存器看出来的。不知道以上理解对不?

既然cpu即进行了有符号数相加有进行了无符号数相加,那么要是两个负数相加的话不是肯定要溢出,因为最高位均为1,请问这是怎么回事?不知哪里理解错了?

[解决办法]
两个正数相加结果为负,溢出
两个负数相加结果为正,溢出
[解决办法]
用两个位做符号位,00为正,11为负,01正溢出,10负溢出。正负仍看第一位,溢出看第二位。
两个位将原1位符号位取4的补码得到。
[解决办法]
还有一个数在内存中如何存储是操作系统决定的还是cpu还是bios决定的?
-------------------------
由程序员决定。

设置OF标志位是根据位6的进位和位7的进位来进行异或的结果。
我在一篇关于溢出的帖子中由比较详细的表述,参见
http://community.csdn.net/Expert/topic/5695/5695921.xml?temp=.2019159

读书人网 >汇编语言

热点推荐