gpt4 book ai didi

assembly - 在一条指令中使用与操作数相同的寄存器是否合法?

转载 作者:行者123 更新时间:2023-12-03 23:26:39 26 4
gpt4 key购买 nike

例如下面是一条X86-64指令:

movq (%rdi),%rdi

它读取内容(由%rdi指向)并将此内容设置为%rdi,这在时序逻辑中是否有效?

或者我们是否必须将其分配给不同的寄存器并将其移回:

movq (%rdi), %rsi
movq rsi, %rdi

最佳答案

在同一指令中重新调整寄存器的用途不仅合法而且很常见。

在机器代码中,CPU 寄存器是快速的,因此是首选存储,但它们的数量有限。而在高级语言中,您不会用完变量(在需要时声明一个新变量)— 编译器和汇编语言程序员倾向于将使用不重叠的变量映射到同一存储空间。

此外,在机器代码中,我们看到许多在高级语言中看不到的短期变量——这些被称为临时变量或表达式临时变量。像机器代码中的 a[i] 这样的简单表达式需要计算 a + i * 4,这可能需要一个 temp 来保存 aii * 4 等。这些临时变量是短暂的变量,如果在后续表达式中不再需要它们,那么保存它们的 CPU 寄存器可以立即重新调整用途为了别的。

关于assembly - 在一条指令中使用与操作数相同的寄存器是否合法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63372560/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com