宿題のために、数字をスキャンし、1 ずつ増やして答えを出力するように求められました。ただし、コードではセグメンテーション エラーが発生する傾向があります。
.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
うまくいかないようです。また、先頭(減算、アドレスのこと)が何を意味するのかわかりません。詳細については、解説を参照してください。前もって感謝します!