X86-64 与函数参数相关的寄存器

问题描述 投票:0回答:1

例如,%rdi 是否保存传递给 x86-64 中函数的第一个参数的值,或者它是否保存可以找到第一个参数值的地址?换句话说,%rdi 保存的是第一个参数的值还是对该参数的引用?

换句话说,如果我在 mov 或 cmp 等上下文中执行 %rdi 或 (%rdi) ,我会得到第一个参数的值吗?

assembly x86-64 calling-convention
1个回答
0
投票

首先,有些语言默认通过引用传递参数,有些则通过值传递。你没有提到它是什么语言。

C/C++ 按值传递,所以它是 %rdi。

汇编程序在技术上不受调用约定的约束,只要它有效即可。工具可能会被抛弃,但这种可能性是存在的。

特别是对于 x86-64、IIRC,整数参数/寄存器对应关系在所有值得注意的操作系统上都是相同的,但理论上,操作系统之间的约定也可能有所不同。

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