Return 值 %eax 约定

Return Value %eax Convention

当然在 i386 中,%eax 保存函数的 return 值,是吗?然而显然这只是惯例。是否可以更改此约定,并使 return 值为 %ebx 或其他内容?如果你这样做,这是否也会使 %ebx return 值进入系统?

这只是惯例,是的。由于 ret 指令不会更改除 esp 之外的任何寄存器,因此您可以使用任何其他 return 值。但是,调用者和被调用者都必须就 return 值的位置达成一致,因此如果您想与其他代码互操作,所使用的调用约定必须兼容。在你自己的函数之间,你想用什么就用什么。出于效率原因,编译器还为私有函数发明了临时约定。