我很好奇的是执行代码后%rax中的剩余值。 例如,让%rax为0xFFFFFFFFFFFFFFFF 我执行了代码。 然后是0xFF ... FF还在%rax?
我的最后一个问题是下面的问题。 在汇编代码中 decode1: movq%rax,(%rdi) RET
为什么return命令不包含在函数decode1的原始c代码中? 我知道执行'ret'时会返回%rax的值。
mov
实际上意味着复制;源操作数不受影响。因此,在movq %rax, (%rdi)
之后,rax
仍然包含之前包含的内容。
为什么return命令不包含在函数decode1的原始c代码中?我知道执行'ret'时会返回%rax的值。
在x86汇编中没有“返回东西”的概念; ret
只是将执行返回给调用者。你说的关于rax
的一点实际上是在几乎所有的x86_64调用约定中,整数或指针返回值在返回之前放在那里,所以调用者期望返回值在那里。如果这是void
函数,rax
没有特别的意义 - 它只是一个破坏性的寄存器。