如何在Assembler中测试变量的相等性?

时间:2014-08-30 11:48:39

标签: assembly 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)

2 个答案:

答案 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 6mov)。

答案 1 :(得分:0)

我发现了错误。我只是跳过“b dd 6”并且它正常工作