int main(void){
printf("Hello World");
return 0;
}
如何將作爲彙編級別的返回值傳遞?這項工作是否有專用的CPU寄存器?如何在彙編級別實現返回值?
UPDATE
這裏的2分表上的PDF傳遞/返回數據,但似乎並不對如何API的調用約定確定確切的信息和寄存器用於存儲返回地址:
int main(void){
printf("Hello World");
return 0;
}
如何將作爲彙編級別的返回值傳遞?這項工作是否有專用的CPU寄存器?如何在彙編級別實現返回值?
UPDATE
這裏的2分表上的PDF傳遞/返回數據,但似乎並不對如何API的調用約定確定確切的信息和寄存器用於存儲返回地址:
這取決於系統的架構。僅舉幾個例子,在x86上,EAX寄存器通常用於返回值。在x86-64上,它是RAX。在SPARC上,它通常會以%o0顯示。
這是application binary interface的一部分。
現在,返回值和函數參數通常在寄存器中傳遞,因爲這是最有效的選項。只有在堆棧被使用的可用寄存器太大的情況下。
你能否提供一個'ABI'的例子,以便我可以知道它是如何在地球上? – Alan 2010-10-10 02:52:16
這取決於很多因素,包括:哪個編譯器,哪個CPU,哪個OS,哪些調用約定,哪些優化活動等等,當然還有哪些語言。 – 2010-10-07 08:12:07
在x86上,syscall/API的返回值通常是** **'eax'寄存器 – jyz 2010-10-07 12:00:42