繁体   English   中英

在减法中携带旗帜

[英]Carry flag in substraction

我正在使用MASM32。

使用此代码:

mov eax,5
sub eax,10

将设置CF状态标志。 但是使用我的铅笔和纸,我实际上发现MSB没有携带任何东西。 是的,我知道从减去数量较少的数字集CF减去。 但我想知道为什么?

因为使用此代码:

mov eax,5
mov ebx,10
not ebx
add ebx,1
add eax,ebx

CF标志永远不会被设置。

5 - 10 = 5 + (-10) = 0x05 + (0xF5 + 1) = 0x05 + 0xF6 = 0xFB

  00000101 -- 0x05
  11110101 -- 0xF5
+ 00000001 -- 0x01
==========
  11111011 -- 0xFB

并且这继续为16或32或64位0 + 1 + 0 = 1,进位为0

从某种意义上说,你是对的,它没有实现。 减法是一个加法,第二个操作数被反转,进位被反转。 一些处理器系列反转执行一些不。 听起来你正在寻找一些可以减少减法执行的东西。

因此,如果5 - 10给出执行(借用)然后在同一处理器上尝试10 - 5,则不应该看到进位设置(不借用)。

你的第二个例子是加法运算,在我知道的任何处理器上都没有反转进位,进一步支持进位位为表示借位的正逻辑。

在第一种情况下设置进位标志是因为你从较小的一个中减去了较大的数字。在第二种情况下假设eax是8位寄存器然后

    eax=00000101=05
    ebx=00010000=10
not ebx=11101111
         +     1
---------------------
        11110000
         +  0101
 ---------------------
        11110101

不发生溢出,即没有设置进位标志。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM