执行“ movq%rax,(%rdi)”后,%rax会怎样?

时间:2019-04-14 15:19:45

标签: assembly x86-64

我很好奇的是执行代码后%rax中的剩余值。
例如,让%rax为0xFFFFFFFFFFFFFFFF
然后我执行了代码。
那么0xFF ... FF是否仍在%rax中?

最后一个问题是下面的问题。
在汇编代码中,
解码1:
movq%rax,(%rdi)
退出

为什么在原始函数decode1的c代码中未包含返回命令?
我了解到执行“ ret”时会返回%rax的值。

1 个答案:

答案 0 :(得分:2)

mov实际上是指复制;源操作数不受影响。因此,movq %rax, (%rdi)之后的rax仍然包含之前包含的所有内容。

  

为什么在原始函数decode1的c代码中未包含返回命令?   我了解到执行“ ret”时会返回%rax的值。

x86汇编中没有“归还某些东西”的概念。 ret只是将执行返回给调用者。您所说的rax实际上是,实际上在所有x86_64调用约定中,整数或指针返回值都在返回之前被放在那里,因此调用者希望返回值在那里。如果这是一个void函数,则rax没有特别的意义-就像其他任何东西一样,只是一个令人费解的寄存器。