进位标志和减法问题

Zia*_*man 3 assembly

如果从较小的数中减去较大的数,则需要借位。进位标志在减法运算中起到借位的作用。现在假设我们要从 56 中减去 66,显然需要借位并设置进位标志。现在如何执行此减法以获得结果 -10,计算机将如何区分结果将是负数。请说明过程。

Jer*_*fin 5

通常,减法是作为求反来实现的,然后是加法。因此,对于您的示例,CPU 将在内部取 56 并添加 -66。在 x86(或大多数其他现代处理器)上,否定将使用二进制补码完成,这意味着否定转换为“对所有位进行补码,然后加一个(并忽略任何进位)”。

    0011 1000
-   0100 0010
    ---------
Run Code Online (Sandbox Code Playgroud)

第二个操作数转换如下:

complement bits: 1011 1101
Increment:       1011 1110
Run Code Online (Sandbox Code Playgroud)

所以执行的操作是:

    0011 1000
+   1011 1110
--------------
=   1111 0110
Run Code Online (Sandbox Code Playgroud)

此结果可以视为 246(作为无符号数)或 -10(作为有符号数)。