我在测试变量的相等性时遇到了问题。在这种情况下它可以工作,它跳过这个“做某事”,它会像我想要的那样转到下一个:
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)
答案 0 :(得分:4)
变量的大小相对于你使用它的方式是错误的:
b dw 6
mov eax, [b]
cmp eax, 6
使用dw
时,声明 word -sized变量,在x86上为16位。 eax
寄存器为32位(双字),因此mov eax,[b]
您在b
加载单词并且在{{1}后面加载单词direcly在内存中,无论可能包含什么。
将您的b
声明更改为b
,或使用零展开b dd 6
(mov
)。
答案 1 :(得分:0)
我发现了错误。我只是跳过“b dd 6
”并且它正常工作