movq %rax,%rdx
movq 13(%rax),%rdx
movq 0x47(%rax,%rcx),%rdx
rcx = 0000000000000030
rax = 0000000008048a37
Run Code Online (Sandbox Code Playgroud)
我想知道这三个流水线指令有什么区别。我知道第一个是将 8048a37 移动到 %rdx。在第二个中,我想我必须在 8048a37 上加上 13 才能得到 8048a4a,然后 8048a4a 指向的任何东西都会移动到 %rdx。在第三个中,我想我添加了 rax、rdx 和 47 来获得 8048aae,然后 8048aae 指向的任何内容都会移动到 %rdx。
这些汇编指令之间的区别在于您正在访问偏移量。让我们通过它们:)
movq %rax,%rdx
Run Code Online (Sandbox Code Playgroud)
只需将 rax 寄存器(eax 位的 64 位寄存器)移动到 rdx 寄存器(edx 32 位的 64 位寄存器)
movq 13(%rax),%rdx
Run Code Online (Sandbox Code Playgroud)
将偏移量为 13 的 rax 寄存器的地址移动到 rdx 寄存器
movq 0x47(%rax,%rcx),%rdx
Run Code Online (Sandbox Code Playgroud)
将 0x47 + rax 寄存器 + rcx 寄存器的地址移动到 rdx 寄存器。