添加16位寄存器

时间:2013-05-20 01:33:55

标签: assembly x86 add cpu-registers

我有这段代码

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

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

提前感谢

1 个答案:

答案 0 :(得分: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

这会有效,但它非常有限且简单

要“计算”进位使用adc dx,在jnc convert

之后插入0

如果寄存器全天候工作,则进位标志置位,因此它就像一个位

ADD FFFF + 2会将其关闭,给你一个+ ve进位标志和寄存器中的0001

您可以将该标志计数存储在adc [other register],0

的单独寄存器中

使用进位标志允许您将寄存器一起拍打以计算类似

的值

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

比65,534

更好,更好