NEG是汇编指令中的求补指令,NEG指令对操作数执行求补运算:用零减去操作数,然后结果返回操作数。求补运算也可以表达成:将操作数按位取反后加1;
格式:NEG OPR
执行的操作:(OPR)<-- —(OPR)[1]
亦即把操作数按位求反后末位加1,因而执行的操作也可表示为:
(OPR)<-- 0FFFFH — (OPR) + 1
NEG指令对标志的影响与用零作减法的SUB指令一样。
NEG 是的求补指令,并非是“求补码”。
NEG 和“原码”也没有任何关系。
NEG 的操作是:用 0 减去操作数。
操作: y = 0-x
也即: y = -x
注意:x 、y,都是带符号数。
即:x 、y,都是补码。
x 是正数的补码,y 就是负数的补码;
x 是负数的补码,y 就是正数的补码。
数学意义上的补码:
1、正数、零的补码是其本身; 2、负数的补码是将其取反后再加一。
计算机指令系统中的求补指令(neg):
无论正数、零、负数,都是 将其取反再加一; 或者说是用模减源码。
模减源码示例:
例一:8位二进制数的模为256,-1 求补为 256-(-1)=257,超过8位的高位舍弃,即为1;
1 求补为 256-1=255 即 FFh
例二:16位二进制数的模为 65536,求补的方式同上,计算完成后 超过16位的舍弃。
=============================================
也就是说数学上的补码 和 计算机中的求补指令不是一回事,千万记住。