x86MASM程序集中的寻址模式和内存源与目标
我查看了许多关于这个主题的主题,但都令人困惑。我还没有看到任何可以帮助我的答案的视觉效果。
我不明白所有这些陈述之间的区别:
mov eax, ebx
mov [eax],ebx
mov eax, [ebx]
如果有人可以创建一个带有值的表格并向我展示,那就太好了。
回答
在 Intel 的语法中,在寄存器名称、标签或常量 (*) 周围添加方括号将导致用于操作的寄存器/标签指向的内存中的数据。
(*) Ross Ridge 的这个答案在使用方括号时处理了 MASM 的一些特性。
mov rax, rbx
将 的内容复制rbx到rax.
mov rax, [rbx]
将引用的 qword加载rbx到rax.
mov [rax], rbx
将rbxto qword的内容存储在 指向的内存中rax。
在 C 风格的语法中,上面的表达式可以写成:
rax = rbx
rax = *rbx
*rax = rbx