1

こんにちはみんな私は次の関数を構築しようとしています

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を返すことはありません。なぜですか。

4

2 に答える 2

3

ちょうどどうですか:

Main:
push byte 5
pop eax
ret
于 2013-03-18T00:52:39.547 に答える
0

誰もが言ったことを要約すると、あなたの主なエラーは、戻り値がEAXに入るはずであり、そうではないということです。プロローグとエピローグのコードは、このような単純な関数には必要ありませんが、(スタックのバランスを崩さない限り)どちらも害はありません。したがって、アセンブリは次のようになります。

(prolog)
movl $5, %eax,
(epilog)
ret

ここで、prologとepilogは、コンパイラがデフォルトで生成するものです。

于 2013-03-18T14:48:34.747 に答える