addq和movl之间的区别,然后是addq

时间:2016-10-20 05:23:29

标签: assembly x86-64

之间的功能区别是什么

addq (%rbx), %rax

movl (%rbx), %ecx addq %rcx, %rax

汇编?

我认为他们做同样的事情,但功能上的区别是什么?

1 个答案:

答案 0 :(得分:3)

第一个从位置rbx的内存中拉出完整四字(64位),并将其添加到rax寄存器。

第二个从同一位置拉出长字(仅32位)并将其存储到ecx(将rcx的上半部分归零)。然后,它会将rcx添加到rax

所以我想说的主要区别在于第二个片段没有将内存中的完整四字添加到rax,只有长字。

第一个(单线程)代码示例更类似于:

movq    (%rbx), %rcx
addq    %rcx,   %rax

虽然 为了使其更接近匹配,您可以在此过程中保存并恢复rcx

rcx

虽然当然,你已经改变push %rcx movq (%rbx), %rcx addq %rcx, %rax pop %rcx (虽然是暂时的)并且它要求你实际设置一个堆栈(可能,但不是绝对的情况)所以你可能会更好地坚持使用单线: - )