作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在功能上有什么区别
addq (%rbx), %rax
和
movl (%rbx), %ecx
添加 %rcx, %rax
在汇编中?
我认为他们做同样的事情,但功能上有什么区别?
最佳答案
第一个从 rbx
位置的内存中提取一个完整四字(64 位),并将其添加到 rax
寄存器。
第二个从同一位置拉出一个长字(仅 32 位)并将其存储到 ecx
(将 rcx
的上半部分置零) ).然后它将 rcx
添加到 rax
。
所以我想说的主要区别是第二个片段没有将内存中的完整四字添加到 rax
,只有长字。
第一个(单行)代码示例更类似于:
movq (%rbx), %rcx
addq %rcx, %rax
尽管 that 也不是严格相同的,因为它更改了 rcx
。为了使其更接近匹配,您可以在过程中保存和恢复 rcx
:
push %rcx
movq (%rbx), %rcx
addq %rcx, %rax
pop %rcx
尽管如此,当然,您已经更改了 rsp
(尽管是暂时的)并且它要求您实际设置一个堆栈(可能,但绝对 case) 所以你最好坚持使用单线 :-)
关于assembly - addq和movl的区别,然后addq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40146064/
我尝试在汇编程序中添加一些值(AMD AT&T 语法)。但我对大立即数(> 32 位)有问题。 .globl f .type f, @function f: movq %rdi
在下面的说明中,addq 是如何工作的?它只有一个操作数,书上声称它递增 %rdx,但 %rdx 不在这条指令中。我很困惑... 这来自《计算机系统:程序员视角》一书,第三版。 最佳答案 正如@Jes
我是一名优秀的程序员,十分优秀!