嗨,大家好,我試圖建立以下功能86簡單的功能不能正常工作
function int Main(){
return 5;
}
這是我的彙編代碼:
.globl Main
Main:
pushl %ebp
movl %esp, %ebp
subl $0, %esp
pushl $5
movl %ebp, %esp
popl %ebp
ret
然而,這總是返回1它永遠不會返回5,爲什麼?
嗨,大家好,我試圖建立以下功能86簡單的功能不能正常工作
function int Main(){
return 5;
}
這是我的彙編代碼:
.globl Main
Main:
pushl %ebp
movl %esp, %ebp
subl $0, %esp
pushl $5
movl %ebp, %esp
popl %ebp
ret
然而,這總是返回1它永遠不會返回5,爲什麼?
如何只:
Main:
push byte 5
pop eax
ret
我希望它與序言和結語,因爲我正在使用C++函數來生成此代碼,並且我希望能夠使用C++函數來生成多個函數在x86中 – 2013-03-18 00:57:40
與其他語言進行交互時,返回值應與Martin一樣在'eax'中。 – Gunner 2013-03-18 01:39:38
總結什麼大家都在說:你的主要錯誤是返回值應該進入EAX和事實並非如此。 Prolog和epilog代碼對於這樣的簡單函數並不是必需的,但它們也不會傷害(只要它們不會使堆棧不平衡)。所以程序集應該去:
(prolog)
movl $5, %eax,
(epilog)
ret
其中,prolog和epilog是默認情況下編譯器生成的任何內容。
_建議:_爲什麼不使用編譯器來生成彙編代碼。例如[GCC](http://www.delorie.com/djgpp/v2faq/faq8_20.html)? – 2013-03-18 01:10:30
@JacobSeleznev我實際上正在嘗試爲一個類構建一個簡單的編譯器,所以我試圖生成彙編代碼。我不明白我生成的彙編代碼有什麼問題 – 2013-03-18 01:15:50