鉴于这段代码:
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
(这只是方法。之前我们将第一个和第二个参数压入堆栈。)
我的问题是:为什么我们将 8 添加到 Base Pointer 以获取第一个参数的地址,然后 12 ?
我知道它们是双字,所以它们每个都是 4 个字节..所以从 ebp + 8 到 ebp + 12 是有意义的。但是为什么第一个是 ebp + 8 ?因为如果ESP指向栈顶,mov ebp,esp表示EBP指向栈顶。然后我们将 4 个值压入堆栈:eax、ebx、ecx 和 edx。为什么 EBP + 8 指向第一个参数?