今天上汇编课,讲到快下课的时候介绍求补指令NEG...大意为:NEG指令的操作是用0减去操作数,结果送回该操作数所在地址。然后teacher又说“大家别忘啦,求补要加1啦~balabalabala”

 此时就感觉奇怪了。MD,我记得求补码应该是负数才“取反(用0减操作数)加1”嘛。为毛这里不管操作数是甚毛数都要取反加一嘞?正数的原-补-反应该是相同才对嘛。结果特马的下课袅,老湿以第一时间杀出了教室。我勒个缺!自己发扬下geek精神算了。回到寝室就g.cn了一下。以下是我找到的靠谱点的解释,略作整理如下,有空翻翻罗云彬的汇编书来看看有没有相关解释。

 

首先,求补与求补码是两个不同的概念,所以才有了求补码分正负数,而求补是不分正负数的情况。

第二,关于求补的解释:求补其实就是一种类似减法的运算,是要改变原数正负号的。其实取反就是去相反数的概念...(PS:那翻译成“求补”干毛哦!顿时好纠结)

第三,关于求补末位加1的问题。这是因为0000求补后为ffff,此时就出现了+0和-0的情况。为了屏蔽这种纠结的答案,所以加1是必要的。再举个简单的例子,0001即+1,取反后为1110,此时只有末位加1变为1111才能表示-1.所以取反后末位加1是必要的。

 

嗯,概括起来就差不多是这样的解释,那么可以看到,其实大家就把求补指令NEG理解为求相反数就OK了。就这么简单。嘿嘿~~