こんにちはみんな私は次の関数を構築しようとしています
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
誰もが言ったことを要約すると、あなたの主なエラーは、戻り値がEAXに入るはずであり、そうではないということです。プロローグとエピローグのコードは、このような単純な関数には必要ありませんが、(スタックのバランスを崩さない限り)どちらも害はありません。したがって、アセンブリは次のようになります。
(prolog)
movl $5, %eax,
(epilog)
ret
ここで、prologとepilogは、コンパイラがデフォルトで生成するものです。