堆栈操作
ESP:堆栈指针寄存器。总是指向栈顶。
入栈操作:运行时堆栈在内存中是向下生长的,即从高地址向低地址扩展。
出栈操作:ESP之下的堆栈域在逻辑上是空白的,当前程序下一次执行任何数值入栈操作指令都可以覆盖这个区域。
堆栈应用:
- 当寄存器用于多个目的时,堆栈可以作为寄存器的一个方便的临时保存区。在寄存器被修改后,还可以恢复其初始值。
- 执行call指令时,cpu在堆栈中保存当前过程的返回地址。
- 调用过程中,输入数值也被称作参数,通过将其压入堆栈实现参数传递。
- 堆栈也为局部变量提供了临时存储 ————————————————————————————————————————————————————————
PUSHFD:把32位EFLAGS寄存器内容压入堆栈
POPFD:把栈顶单元内容弹出到EFLAGS寄存器中。
通常会用这两个封闭一段代码:
pushfd ;保存标志寄存器
;
;
;
popfd ; 恢复标志寄存器
PUSHAD:指令按照EAX,EBX,ECX,EDX,ESP,EBP,ESI,EDI将所有32位寄存器压入堆栈。
POPAD:指令按照相反的顺序将同样的寄存器弹出堆栈。
PUSHA:应用于16位
POPA:应用于16位
————————————————————————————————————————————————————————
定义并使用过程
PROC伪指令:过程用proc和endp来定义,并且为其分配一个名字,ret强制cpu反返回到该过程被调用的位置
main PROC
.