0

我有这个代码

addInt:
        add cx, bx
        cmp cx, 0FFFFh
        JBE convert

我正在尝试添加 cx 和 bx 寄存器,每个寄存器都有相同的值FFFF,而不是得到1FFFE,我只得到FFFE,当我尝试使用JBE跳转到转换循环时,JBE 指令什么也不做,因为ecx寄存器现在只包含FFFE,但不1FFF,那么如何修复此代码以使其ecx包含 1FFFE 以及如何比较以检查它是否仍然是 16 位。我不能使用任何使事情变得更复杂的 32 位寄存器

预先感谢

4

1 回答 1

1
addInt:

    clc            ;clear carry flag

    add cx,bx

    jnc convert    ;jump no carry

    cmp cx,FFFEh   ;This now needs to be true, only FFFF+FFFF will succeed

                    because it generates a carry AND matches the cmp

    Jnz convert    ;will let it through

这会起作用,但它非常有限且过于简单

要“计算”进位,请使用 jnc 转换后插入的 adc dx,0

如果寄存器全天候运行,则设置进位标志,因此它的作用类似于单个位

ADD FFFF+2 将其关闭,在寄存器中为您提供 +ve 进位标志和 0001

您可以使用 adc [other register],0 将该标志计数存储在单独的寄存器中

使用进位标志可以让您将寄存器拍打在一起以计数到类似的东西

1,208,741,363,432,547,555,475,424,带 4x16 位寄存器

这比 65,534 好很多而且英里

于 2013-05-20T01:56:46.717 回答