x86简单的功能不起作用

时间:2013-03-18 00:48:13

标签: function assembly x86

大家好我正在尝试构建以下功能

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为什么?

2 个答案:

答案 0 :(得分:3)

如何:

Main:
push byte 5
pop eax
ret

答案 1 :(得分:0)

总结大家所说的:你的主要错误是返回值应该进入EAX,而不是。像这样的简单函数不需要Prolog和epilog代码,但它们也不会受到伤害(只要它们不会使堆栈失衡)。所以大会应该去:

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

prolog和epilog是默认情况下编译器生成的任何内容。