第5章 过程
来源:互联网 发布:古惑仔结局知乎 编辑:程序博客网 时间:2024/06/06 13:02
5.1 堆栈操作
5.1.2 PUSH 和 POP 指令
PUSH 指令
PUSH 指令首先减少 ESP 的值,再将游、操作数复制到堆拢 。 操作数是 16 位的,则 ESP减 2 ,操作数是 32 位的,则 ESP 减 4 。 PUSH 指令有 3 种格式:
PUSH reg/meml6PUSH reg/mem32PUSH imm32
POP 指令
pop 指令首先把 ESP 指向的堆梳元素内容复制到 一个 16 位或 32 位目的操作数中,再增加 ESP 的值。 如果操作数是 16 位的, ESP 加 2 ,如果操作数是 32 位的, ESP 加 4:
POP reg/meml6POP reg/mem32
PUSHFD 和 POPFD 指令
PUSHFD 指令把 32 位 EFLAGS 寄存器内容压人堆钱,而 POPFD 指令则把栈顶单元内容弹出到 EFLAGS 寄存器:
pushfdpopfd
PUSHAD, PUSHA, POPAD 和 POPA
PUSHAD 指令按照 EAX 、 ECX 、 EDX 、 EBX 、 ESP (执行 PUSHAD 之前的值)、 EBPESI 和 EDI 的顺序,将所有 32 位通用寄存器压人堆栈 。 POPAD 指令按照相反顺序将同样的寄存器弹出堆栈。与 之相似. PUSHA 指令按序( AX 、 ex 、 DX 、 BX 、 SP 、 BP 、 SI 和 DI)将 16 位通用寄存器压人堆栈 。 POPA 指令按照相反顺序将同样的寄存器弹出堆栈 。 在 16 位模式下,只能使用 PUSHA 和 POPA 指令 。
5.2 定义并使用过程
5.2.2 CALL 和 RET 指令
CALL 指令调用一个过程,指挥处理器从新的内存地址开始执行 。 过程使用 RET (从过程返回)指令将处理器转回到该过程被调用的程序点上 。 从物理上来说, CALL 指令将其返回地址压人堆栈,再把被调用过程的地址复制到指令指针寄存器。当过程准备返回时,它的
RET 指令从堆找把返回地址弹回到指令指针寄存器 。 32 位模式下, CPU 执行的指令由 EIP(指令指针寄存器)在内存中指出 。
5.2.6 保存和恢复寄存器
USES 运算符
USES 运算符与 PROC 伪指令一起使用,让程序员 列出在该过程中修改的所有寄存器名 。 USES 告诉汇编器做两件事情:第一,在过程开始时生成 PUSH 指令,将寄存器保存到堆栈;第二,在过程结束时生成 POP 指令,从堆栈恢复寄存器的值。 USES 运算符紧跟在PROC 之后,其后是位于同一行上的寄存器列表,表项之间用空格符或制表符(不是逗号)分隔 。
- 第5章 过程
- 第5 章 隐藏实施过程
- 第6章 子过程:
- 第6章 子过程
- JAVA之第5章 隐藏实施过程
- JAVA之第5章 隐藏实施过程
- Java编程思想:第5章 隐藏实施过程
- java基础 第5章 隐藏实施过程
- Thinking in Java 第5章 隐藏实施过程 总结
- 第3章 软件开发过程
- 第11章 过程,函数和触发器
- 第46章、调用简单存储过程
- 第1章 深入Web请求过程
- 第12章 存储过程和函数
- 第 9 章 存储过程与函数
- 第8章 存储过程和触发器
- Think in java学习笔记-第5章 隐藏实施过程
- java编程思想(第四版)_第5章 隐藏实施过程
- 1596 搬货物
- AndroidManifest的activity下的name路径没具体导致开启失败
- eclipse 的工作空间
- 在Ubuntu 16.04 安装sogou 输入法
- Java解析JSON文件的方法
- 第5章 过程
- UESTC1712 七夜雪寂,一世人心(SG)
- vue路径中的#号
- 二分查找
- 快速幂
- pair 的用法
- python入门(三):条件判断 if elif else
- 深入Java集合学习系列:HashMap的实现原理
- 欢迎使用CSDN-markdown编辑器