x86汇编,如何添加存储在内存中的变量?

时间:2012-04-15 10:10:45

标签: assembly x86 masm masm32

平台:奔腾4处理器(我真的需要升级:)运行Windows XP。我目前正在组装MASM32。

我是装配的绝对初学者,我正在试图弄清楚如何添加变量。我理解如何定义变量,将数据放在寄存器中,以及如何在堆栈中放置寄存器,但我不知道如何组合两个变量的值(通过添加)。

此外,任何人都可以给我一个关于x86汇编的易于理解的教程的链接或东西,到目前为止我发现的所有这些都是高级的东西,他们没有解释太多。真的很感激。

提前致谢, Progrmr

2 个答案:

答案 0 :(得分:4)

简单补充:

add eax, ebx   ; Adds eax and ebx and stores the result in eax

从内存加载,然后添加,然后存储在内存中:

mov eax, DWORD PTR [esi]    ; Load a double word from memory into eax
mov ebx, DWORD PTR [edi]    ; Load a double word from memory into ebx
add eax, ebx                ; Adds eax and ebx and stores the result in eax
mov DWROD PTR[esi], eax     ; Store a double word in eax into memory

在上面的例子中,并不严格需要DWORD PTR,但这是一个很好的练习习惯,因为它可以消除任何歧义并使代码更容易阅读。

重要的是要记住,您只能添加相同大小的寄存器(上例中的DWORD)。如果要添加两个不同大小的寄存器:

mov al, BYTE PTR [esi]    ; Loads a single byte from memory into al
mov bx, WORD PTR [edi]    ; Loads a word from memory into bx
movzx eax, al             ; Zero extends al into the entire eax register
movzx ebx, bx             ; Zero extends bx into the entire ebx register
add eax, ebx              ; Adds eax and ebx and stores the result in eax

这不是一个非常好的例子,因为有更简单的方法可以做同样的事情,但希望它会显示一些你可以使用的技巧。

您还可以向寄存器添加内存值:

mov eax, DWORD PTR [esi]     ; Load a double word from memory into eax
add eax, DWORD PTR [edi]     ; Add a double word in memory to eax

这是一个很好的网站,可用作参考:http://ref.x86asm.net/

答案 1 :(得分:0)

我怀疑你是概念问题。 x86值存在于寄存器或内存中,变量的概念是更高级别。添加值的一种方法是将它们放入寄存器,然后调用add操作。

http://computertech.createmybb3.com/showthread.php?tid=116