我很好奇的是执行代码后%rax中的剩余值。
例如,让%rax为0xFFFFFFFFFFFFFFFF
然后我执行了代码。
那么0xFF ... FF是否仍在%rax中?
最后一个问题是下面的问题。
在汇编代码中,
解码1:
movq%rax,(%rdi)
退出
为什么在原始函数decode1的c代码中未包含返回命令?
我了解到执行“ ret”时会返回%rax的值。
答案 0 :(得分:2)
mov
实际上是指复制;源操作数不受影响。因此,movq %rax, (%rdi)
之后的rax
仍然包含之前包含的所有内容。
为什么在原始函数decode1的c代码中未包含返回命令? 我了解到执行“ ret”时会返回%rax的值。
x86汇编中没有“归还某些东西”的概念。 ret
只是将执行返回给调用者。您所说的rax
实际上是,实际上在所有x86_64调用约定中,整数或指针返回值都在返回之前被放在那里,因此调用者希望返回值在那里。如果这是一个void
函数,则rax
没有特别的意义-就像其他任何东西一样,只是一个令人费解的寄存器。