当然在i386中,%eax保存函数的返回值,是吗?但显然这只是惯例。是否可以更改此约定,并使返回值为%ebx或其他什么?如果你这样做,这是否也会使%ebx返回系统值?
答案 0 :(得分:4)
这只是惯例,是的。由于ret
指令不会更改除esp
之外的任何寄存器,因此您可以使用任何其他寄存器来返回值。但是,调用者和被调用者都必须就返回值的位置达成一致,因此如果要与其他代码进行互操作,则使用的调用约定必须兼容。在你自己的功能之间,你可以使用你想要的任何东西。出于效率原因,编译器还为私有函数发明了临时约定。