平台:奔腾 4 处理器(我真的需要升级 :) 运行 Windows XP。我目前正在用 MASM32 组装。
我是汇编的绝对初学者,我正在尝试弄清楚如何添加变量。我了解如何定义变量、将数据放入寄存器以及如何将寄存器放入堆栈,但我不知道如何组合两个变量的值(通过相加)。
另外,任何人都可以给我一个链接或一些易于理解的x86汇编教程,到目前为止我发现的所有这些都是非常高级的东西,他们没有解释太多。那将不胜感激。
在此先感谢,
简单加法:
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/
我怀疑你的概念有问题。x86 值存在于寄存器或内存中,变量的概念是更高级别的。添加值的一种方法是将它们放入寄存器中,然后调用添加操作。