movq %rax,%rdx
movq 13(%rax),%rdx
movq 0x47(%rax,%rcx),%rdx
rcx = 0000000000000030
rax = 0000000008048a37
我想知道这三条装配线指令之间的区别是什么。我知道第一个是将8048a37移动到%rdx。 在第二个中,我想我必须添加13到8048a37才能获得8048a4a,然后8048a4a指向的任何内容都会被移动到%rdx。 在第三个,我想我添加rax,rdx和47来获得8048aae,然后8048aae指向的任何东西都被移动到%rdx。
答案 0 :(得分:3)
这些汇编指令之间的区别在于您正在访问偏移量。让我们来看看:)
movq %rax,%rdx
只需将rax寄存器(eax位为64位寄存器)移至rdx寄存器(edx 32位为64位寄存器)
movq 13(%rax),%rdx
将rax寄存器的地址以13的偏移量移动到rdx寄存器
movq 0x47(%rax,%rcx),%rdx
将0x47 + rax寄存器+ rcx寄存器的地址移至rdx寄存器。
答案 1 :(得分:0)
movq %rax, %rdx
- 将RAX寄存器的内容移动到RDX寄存器。
movq 13(%rax), %rdx
- 将地址[RAX + 13]
中的8字节值从存储器加载到RDX寄存器。
movq 0x47(%rax,%rcx),%rdx
- 将地址[RAX + RCX + 0x47]
中的8字节值从存储器加载到RDX寄存器。