我有測試變量相等的問題。在這種情況下它的工作原理,它跳過這個「做什麼」,它進入下一個像我想:如何在彙編程序中測試變量的相等性?
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)
我有測試變量相等的問題。在這種情況下它的工作原理,它跳過這個「做什麼」,它進入下一個像我想:如何在彙編程序中測試變量的相等性?
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)
您的變量相對的大小,您如何使用它是錯誤的:
b dw 6
mov eax, [b]
cmp eax, 6
當您使用dw
時,您聲明一個字 -sized變量,它是x86上的16位。 eax
寄存器是32位(雙字),因此用mov eax,[b]
您正在加載單詞b
和直接在內存中的b
這個詞,無論可能包含什麼。
要麼將您的b
的聲明更改爲b dd 6
,要麼使用零延伸的mov
(movzx eax, word [b]
)。
我發現了錯誤。我只是跳過「b dd 6
」它工作
這個? \t'b DD 6 \t MOV AX,[B] \t CMP斧頭,6 \t JE未來 \t;做一些 \t下一個:' 它再不會跳過 「有所作爲」 – 2014-08-30 12:14:34
我沒沒有意識到你在變量聲明和'mov'之間沒有任何東西。你的代碼路徑中不應該有數據。關於你的評論:如果你把'b'加載到'ax'而不是'eax',你可以繼續使用'dw'作爲'b',因爲'ax'是16位(假設你沒有任何32位在代碼中的其他地方訪問'b''')。 – Michael 2014-08-30 12:44:27