对于家庭作业,我们被要求扫描一个数字,将其加一并打印答案。但是,代码往往会产生分段错误。
.global main
mystring: .asciz "Assignment 3: inout\n"
string: .asciz "%d"
main: pushl $mystring
call printf
jmp inout
end: pushl $0
call exit
这基本上就是我们正在做的事情。在没有跳转的情况下运行这样的代码。问题出在 inout 方法中
inout: subl $0, %esp ;what is happening here
leal -4(%ebp), %eax ;what am i doing here
pushl %ebp ;why do i need to push the base pointer
movl %esp, %ebp
pushl %eax
pushl $string
call scanf
incl %eax
pushl %eax
pushl $string
call printf
这似乎不起作用。我也不知道开头(减法,地址)是什么意思,请参阅评论以了解更多信息。提前致谢!