栈顶指针esp 栈底指针ebp
esp寻址
构建函数
1.使用寄存器传递参数
2.使用堆栈来传递参数
push 1
push 2
push 3
把要用的参数压入堆栈后,需要用call调用函数来计算参数,调用call时,会将call的下一行指令的地址压入栈中,所以使用参数时地址为[esp+4,8,12]
使用函数的代码为 mov eax,ptr ss:[esp+4]
add eax,ptr ss:[esp+8]
add eax,ptr ss:[esp+12]
retn 12 //保持堆栈平衡
在函数中,需要使用寄存器时,最好将原来寄存器的值保存在堆栈中,使用完后,倒序pop回来
ebp寻址
在一个函数中重新分配栈空间给这个函数使用,使用完恢复为原来的栈
push 1
push 2
call 函数
……
push ebp
mov ebp,esp
mov esp,10 //10为十六进制,决定于实际需要的栈的大小
mov eax,ptr ss:[ebp+8]
add eax,ptr ss:[ebp+C]
mov esp,ebp
pop ebp
ret