Assembly 如何在汇编程序中测试变量的相等性?
我在测试变量的相等性方面有问题。在这种情况下,它起作用了,它跳过了这个“做点什么”,它按照我想要的方式转到下一步:Assembly 如何在汇编程序中测试变量的相等性?,assembly,nasm,Assembly,Nasm,我在测试变量的相等性方面有问题。在这种情况下,它起作用了,它跳过了这个“做点什么”,它按照我想要的方式转到下一步: b dw 5 mov eax, [b] cmp eax, 5 je next ;do something next: 但是,如果我将例6设置为例6而不是例5,则不会跳过“做某事”: (使用NASM)变量的大小相对于使用它的方式是错误的: b dw 6 mov eax, [b] cmp eax, 6 当您使用dw时,您声明了一个字大小的变量,在x86上为16位。eax
b dw 5
mov eax, [b]
cmp eax, 5
je next
;do something
next:
但是,如果我将例6设置为例6而不是例5,则不会跳过“做某事”:
(使用NASM)变量的大小相对于使用它的方式是错误的:
b dw 6
mov eax, [b]
cmp eax, 6
当您使用dw
时,您声明了一个字大小的变量,在x86上为16位。eax
寄存器是32位(一个双字),因此使用mov eax,[b]
您将在b
处加载该字,并在内存中直接在b
之后加载该字,不管它可能包含什么
将
b
的声明更改为b dd 6
,或使用零扩展mov
(movzx eax,word[b]
)。变量的大小相对于使用它的方式是错误的:
b dw 6
mov eax, [b]
cmp eax, 6
当您使用dw
时,您声明了一个字大小的变量,在x86上为16位。eax
寄存器是32位(一个双字),因此使用mov eax,[b]
您将在b
处加载该字,并在内存中直接在b
之后加载该字,不管它可能包含什么
将
b
的声明更改为b dd 6
,或使用零扩展mov
(movzx eax,word[b]
)。变量的大小相对于使用它的方式是错误的:
b dw 6
mov eax, [b]
cmp eax, 6
当您使用dw
时,您声明了一个字大小的变量,在x86上为16位。eax
寄存器是32位(一个双字),因此使用mov eax,[b]
您将在b
处加载该字,并在内存中直接在b
之后加载该字,不管它可能包含什么
将
b
的声明更改为b dd 6
,或使用零扩展mov
(movzx eax,word[b]
)。变量的大小相对于使用它的方式是错误的:
b dw 6
mov eax, [b]
cmp eax, 6
当您使用dw
时,您声明了一个字大小的变量,在x86上为16位。eax
寄存器是32位(一个双字),因此使用mov eax,[b]
您将在b
处加载该字,并在内存中直接在b
之后加载该字,不管它可能包含什么
要么将
b
的声明更改为b dd 6
,要么使用零扩展mov
(movzx eax,word[b]
)。我发现了错误。我刚跳过“bd6
”它就工作了我发现了错误。我刚跳过“bd6
”它就工作了我发现了错误。我刚跳过“bd6
”它就工作了我发现了错误。我只要跳过“bd6
”它就可以工作了这个?b dd 6 mov ax,[b]cmp ax,6 je next;接下来做些什么:
它不会再次跳过“做点什么”我没有意识到在变量声明和mov
之间确实没有任何东西。代码路径中不应包含数据。关于您的评论:如果您将b
加载到ax
而不是eax
中,您可以继续使用dw
作为b
,因为ax
是16位的(假设您在代码的其他地方没有对b
的任何32位访问)。这是什么?b dd 6 mov ax,[b]cmp ax,6 je next;接下来做些什么:
它不会再次跳过“做点什么”我没有意识到在变量声明和mov
之间确实没有任何东西。代码路径中不应包含数据。关于您的评论:如果您将b
加载到ax
而不是eax
中,您可以继续使用dw
作为b
,因为ax
是16位的(假设您在代码的其他地方没有对b
的任何32位访问)。这是什么?b dd 6 mov ax,[b]cmp ax,6 je next;接下来做些什么:
它不会再次跳过“做点什么”我没有意识到在变量声明和mov
之间确实没有任何东西。代码路径中不应包含数据。关于您的评论:如果您将b
加载到ax
而不是eax
中,您可以继续使用dw
作为b
,因为ax
是16位的(假设您在代码的其他地方没有对b
的任何32位访问)。这是什么?b dd 6 mov ax,[b]cmp ax,6 je next;接下来做些什么:
它不会再次跳过“做点什么”我没有意识到在变量声明和mov
之间确实没有任何东西。代码路径中不应包含数据。关于您的评论:如果您将b
加载到ax
而不是eax
中,您可以继续为b
使用dw
,因为ax
是16位的(假设您在代码的其他地方没有对b
的任何32位访问)。