2014-08-30 73 views
0

我有測試變量相等的問題。在這種情況下它的工作原理,它跳過這個「做什麼」,它進入下一個像我想:如何在彙編程序中測試變量的相等性?

b dw 5 

mov eax, [b] 
cmp eax, 5 
je next 
;do something 
next: 

但是,如果我例如6而不是5也不會跳過「做一些事情」載:

b dw 6 

mov eax, [b] 
cmp eax, 6 
je next 
;do something 
next: 

(使用NASM)

回答

4

您的變量相對的大小,您如何使用它是錯誤的:

b dw 6 

mov eax, [b] 
cmp eax, 6 

當您使用dw時,您聲明一個 -sized變量,它是x86上的16位。 eax寄存器是32位(雙字),因此用mov eax,[b]您正在加載單詞b直接在內存中的b這個詞,無論可能包含什麼。

要麼將​​您的b的聲明更改爲b dd 6,要麼使用零延伸的movmovzx eax, word [b])。

+0

這個? \t'b DD 6 \t MOV AX,[B] \t CMP斧頭,6 \t JE未來 \t;做一些 \t下一個:' 它再不會跳過 「有所作爲」 – 2014-08-30 12:14:34

+0

我沒沒有意識到你在變量聲明和'mov'之間沒有任何東西。你的代碼路徑中不應該有數據。關於你的評論:如果你把'b'加載到'ax'而不是'eax',你可以繼續使用'dw'作爲'b',因爲'ax'是16位(假設你沒有任何32位在代碼中的其他地方訪問'b''')。 – Michael 2014-08-30 12:44:27

0

我發現了錯誤。我只是跳過「b dd 6」它工作