このコードを考えると:
swap:
push ebp ; back up the base pointer,
mov ebp, esp
; push the context of the registers on the stack
push eax
push ebx
push ecx
push edx
mov eax, [ebp+8] ; address of the first parameter
mov ebx, [ebp+12] ; address of the second parameter
mov dl, [eax]
mov cl, [ebx]
mov [eax], cl
mov [ebx], dl
; restore the context of the registers from the stack
pop edx
pop ecx
pop ebx
pop eax
; restore the ebp
pop ebp
ret
(これは単なるメソッドです。以前は、最初と 2 番目のパラメーターをスタックにプッシュしていました。)
私の質問は、最初のパラメーターのアドレスを取得するためにベースポインターに 8 を追加し、次に 12 を取得するのはなぜですか?
それらはdwordであるため、それぞれが4バイトであるという事実がわかりました..したがって、ebp + 8からebp + 12までは意味があります。しかし、なぜ最初のものは ebp + 8 なのですか? ESP がスタックの TOP を指す場合、mov ebp, esp は、EBP がスタックの TOP を指すことを意味するためです。次に、スタックに 4 つの値をプッシュします: eax、ebx、ecx、および edx。EBP + 8 が最初のパラメーターを指しているのはなぜですか?