我正在尝试组装一小段x86代码。我在32位机器上,我写了以下代码。它应该只是将值添加到eax然后返回。我意识到不会有任何输出。当我使用
编译它时 gcc main.S -o main
它编译没有错误。但是当我运行它时出现seg错误(gdb声称它在第一个movl指令上有段错误)。 main.S中包含以下代码。我做错了什么?
.text
.globl main
main:
pushl %ebp
movl %esp, %ebp
movl 0, %eax
addl $3, %eax
addl $3, %eax
leave
ret
答案 0 :(得分:4)
不是你的第一个,而是你的第二个movl
movl 0,%eax
不是使用文字$0
而是使用地址0.这可能会产生一个好的段错误!
答案 1 :(得分:0)
AT& T语法让我的眼睛受伤,但代码对我来说很好看。如果使用Enter而不是前两条指令,或者完全取出堆栈帧设置会发生什么?