关于汇编为什么NEG指令是求补呢?

来源:百度知道 编辑:UC知道 时间:2024/06/16 20:24:42
我是初学NEG指令的新手,有个关于NEG指令的问题希望大家解答,谢谢。
NEG指令的效果为 把操作数按二进制全部按位取返并+1,我们老师说这就是求补码(负数),本身这个指令也叫求补指令。但是,我想知道,按照计算机组成原理来说,二进制的补码(负数),求补之后不是符号位不变吗?为什么在DEBUG下,操作数就被认为是补码表示之后,代表符号位的首位就要变了呢?希望高手能详细解答,谢谢……
那我还想问问,DEBUG下到底如何求补码呢?

求补与求补码是两个不同的概念。

1、求补码。正数的补码就是其原码;负数的补码是其原码按位取反后加1。

2、求补。是一种减法运算,是要改变正负号的,实际就是用0去减这个操作数。

补充回答:DEBUG下求补
a
mov al,2
neg al
neg al

t
t
t

怎么会不变呢。负数求补那是正数,正数求补那是负数。

比如:

0001假设第一位是符号位,这是正数1,把他求补
(1)先取反:1110(2)再+1:1111 这就是-1

为啥要加1呢?
因为如果你不加1,0000这是正0 ;ffff这是-0 ,但是一般我们只认为有一个0
所以要+1