测试十六进制数是否在16位寄存器的范围内

时间:2013-05-20 04:30:01

标签: loops assembly x86 add cpu-registers

addInt:
        clc
        mov ax, cx
        add ax, bx
            JNC convert

我如何能够测试总和是否在16位范围内,因为如果我使用16位寄存器加上结果,即使总和大于16位,结果也不显示残留值,OF不会因为使用16位寄存器,它永远不会溢出。我应该如何继续使用此代码使其跳转到转换循环。例如,如果我有FFFF + FFFE,则总和将为1FFFD,但eax寄存器将仅显示FFFD,而不会结转1 感谢提前帮助

1 个答案:

答案 0 :(得分:2)

如果结果值大于16位,您应该能够告诉add指令。

  

ADD指令执行整数加法。它评估两个签名的结果   和无符号整数操作数,并设置OF和CF标志,分别表示有符号或无符号结果中的进位(溢出)。 SF标志表示符号   签署的结果。

由于您似乎正在处理无符号的16位值,因此您应该在添加后查看CF进位标志:

addInt:
    clc
    mov ax, cx
    add ax, bx                ; Sets CF if result is larger than 16-bits
    jc .larger_than_16_bits