执行“movq%rax,(%rdi)”后%rax会发生什么?

问题描述 投票:-2回答:1

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

我的最后一个问题是下面的问题。 在汇编代码中 decode1: movq%rax,(%rdi) RET

为什么return命令不包含在函数decode1的原始c代码中? 我知道执行'ret'时会返回%rax的值。

assembly x86-64
1个回答
2
投票

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

为什么return命令不包含在函数decode1的原始c代码中?我知道执行'ret'时会返回%rax的值。

在x86汇编中没有“返回东西”的概念; ret只是将执行返回给调用者。你说的关于rax的一点实际上是在几乎所有的x86_64调用约定中,整数或指针返回值在返回之前放在那里,所以调用者期望返回值在那里。如果这是void函数,rax没有特别的意义 - 它只是一个破坏性的寄存器。

© www.soinside.com 2019 - 2024. All rights reserved.