-2
以下のアセンブリコードがあります。だから、printfが何を印刷するのかを知っているのと同じように?それはちょうど常に上にプッシュされているアドレスにあるものを印刷しますか?この場合、 "push msg"?アセンブリのprintfは何を印刷するのかを知っていますか?
SECTION .data
msg: db "Hello World!",10,0
SECTION .text
extern printf
global main
main:
push ebp
move ebp, esp
push msg
call printf
move esp, ebp
pop ebp
ret
はい、他の関数と同様にargsを調べます。どのようにargが関数に渡されるかは、ABI /呼び出し規約を参照してください。 //stackoverflow.com/tags/x86/info –
スタックメモリ( 'ss:esp')から書式文字列アドレスを取ります。戻りアドレスの次の値として、それをどのように設定するかは関係ありません'call'の前に' push 'を実行するのは便利で一般的な "普通の"方法ですが、私は 'mov'、' sub'、 'jmp'命令で同じことをシミュレートすることができます(' push 'または' call')を呼び出します。 – Ped7g