大家好我正在尝试构建以下功能
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为什么?
答案 0 :(得分:3)
如何:
Main:
push byte 5
pop eax
ret
答案 1 :(得分:0)
总结大家所说的:你的主要错误是返回值应该进入EAX,而不是。像这样的简单函数不需要Prolog和epilog代码,但它们也不会受到伤害(只要它们不会使堆栈失衡)。所以大会应该去:
(prolog)
movl $5, %eax,
(epilog)
ret
prolog和epilog是默认情况下编译器生成的任何内容。