我需要将带符号的数字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
这里我们遇到了同样的问题。
我该怎么做?
答案 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