1 2 3 下一页 由于 "栈" 是由高到低使用的, 所以新压入的数据的位置更低. ESP 中的指针将一直指向这个新位置, 所以 ESP 中的地址数据是动态的. 每次 PUSH, ESP = ESP - x; 每次 POP, ESP = ESP + x; 其中的 x 只能是 4 或 2, 因为 Win32 的 PUSH 只可以压入 32 位(默认)或 16 位的数据. ESP 有个名字叫 "栈顶", 其实它指向的是栈中最低位置的数据. 实例查看 ESP 的变化: ; Test18_1.asm .386 .model flat, stdcall include Windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .data ddVal1 dd 1 ddVal2 dd 2 dwVal1 dw 3 dwVal2 dw 4 .code main proc PrintHex esp ;0012FFA4 push ddVal1 PrintHex esp ;0012FFA0 push ddVal2 PrintHex esp ;0012FF9C push dwVal1 PrintHex esp ;0012FF9A push dwVal2 PrintHex esp ;0012FF98 pop dwVal2 PrintHex esp ;0012FF9A pop dwVal1 PrintHex esp ;0012FF9C pop ddVal2 PrintHex esp ;0012FFA0 pop ddVal1 PrintHex esp ;0012FFA4 ret main endp end main (责任编辑:admin)
|