2014-04-09 52 views
-1

我需要比較一個帶符號的數字N和32位,零對其他32位有符號數。我該怎麼做?8086中的多精度零點校驗

假設N32在DX:AX上。 我試圖做以比較零:

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

但在這裏,我只是比較高字節(DX),不是嗎?

與另一個數字進行比較。假設在由SI引用的存儲器中:

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

而這裏我們遇到了同樣的問題。

我該怎麼辦?

回答

0

如果您在內存或寄存器中有兩個16位數量,並且您想測試它們是否都爲零,您可以將它們組合在一起OR。如果OR的結果爲零,則兩個操作數均爲零。

如果您有兩個32位量,每個量表示爲兩個16位量,並且您想知道兩個32位量的比較是否相等,則減去兩個量的高16位,將低16位這兩個量的位和OR這些差異一起...再次,如果OR的結果爲零,則兩個32位量都是相等的。

比方說,你在DX 32位的數量:在CX AX和其它: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