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 和 Epilog 代码对于像这样的简单函数不是必需的,但它们也不会受到伤害(只要它们不会使堆栈不平衡)。所以组装应该去:

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

prolog 和 epilog 是编译器默认生成的。

于 2013-03-18T14:48:34.747 回答