8086中的多精度零点验证

时间:2014-04-09 11:05:54

标签: assembly x86-16

我需要将带符号的数字N与32位对零进行比较,并与其他32位有符号数进行比较。我该怎么办?

假设N32在DX:AX上。 我试图与零进行比较:

sub ax,0
sbb dx,0
jz
;do else

但在这里我只比较MSByte(dx),不是吗?

与另一个数字进行比较。假设在SI引用的内存中:

sub ax,[si]
sbb dx,[si+2]
jz
;do else

这里我们遇到了同样的问题。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

如果您在内存或寄存器中有两个16位数量,并且您想测试它们是否都为零,则可以将它们OR放在一起。如果OR的结果为零,则两个操作数均为零。

如果您有两个32位数量,每个数量表示为两个16位数量,并且您想知道两个32位数量是否相等,则减去两个数量的高16位和低16位这两个数量的位和OR这些差异在一起......再次,如果OR的结果为零,则两个32位数量相等。

假设您在DX:AX中有32位数量,在CX:BX中有另一个数量,并且您想知道它们是否相等:

sub ax,bx ; ax = ax - bx
sub dx,cx ; dx = dx - cx
or  ax,dx ; ax = ax OR dx
je  they_are_equal

SUB可以替换为XOR

xor ax,bx ; ax = ax ^ bx
xor dx,cx ; dx = dx ^ cx
or  ax,dx ; ax = ax OR dx
je  they_are_equal