装配基础知识 - movq

时间:2016-09-21 17:11:52

标签: assembly x86-64

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。

2 个答案:

答案 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寄存器。