私はアセンブリ言語を学んでおり、呼び出し規則とスタックのクリーンアップについて質問があります。
私は OSX を使用しているので、システム コールには次のような BSD 呼び出し規約を使用する必要があります。
SECTION .text
push StringLen ; Push string length
push MyString ; Push the string
push 0x1 ; Push the file descriptor (stdout)
mov eax, 4 ; Push the system call (sys_write)
int 0x80 ; Call kernel dispatcher
add esp, 0x10 ; Clean up stack 16 bytes for 4DWORDS
mov eax, 1
mov ebx, 0
int 0x80 ; System exit
私の質問はadd esp, 0x10
、スタックをクリーンアップするための良い習慣と考えられていますか? 私は実験しましたが、クリーンアップ後、値はまだスタックにあるように見えますが、別の値がプッシュされると上書きされます。
add esp, 0x10 ; Clean up stack 16 bytes for 4DWORDS
push 0x1A ; New push overwrites the previous stack values
これは小さなプログラムでは大きな違いをもたらさないと確信していますが、大きなプログラムでは、上書きされなければスペースが無駄になることはありませんか?