汇编思维导图
《汇编思维导图》
一、 基础概念
1.1 汇编语言定义
- 低级程序设计语言:直接操作硬件
- 助记符:指令的符号表示
- 汇编器:将汇编代码转换为机器码
1.2 机器码与指令集架构 (ISA)
- 机器码:CPU直接执行的二进制代码
- 指令集架构:CPU能识别和执行的指令集合
- x86, ARM, RISC-V
- 指令格式:操作码 + 操作数
1.3 汇编语言的优点与缺点
- 优点:
- 性能高:直接控制硬件,效率高
- 控制性强:可以精确控制硬件资源
- 适用于底层编程:驱动开发,嵌入式系统
- 编写复杂:代码量大,可读性差
- 调试困难:容易出错,不易定位
- 可移植性差:依赖于特定的硬件平台
1.4 数据表示
- 数值:
- 二进制 (Binary)
- 十进制 (Decimal)
- 十六进制 (Hexadecimal)
- 字节 (Byte - 8 bits)
- 字 (Word - 16 bits)
- 双字 (Double Word - 32 bits)
- 四字 (Quad Word - 64 bits)
- 大端序 (Big Endian)
- 小端序 (Little Endian)
二、 汇编语言组成
2.1 指令
- 定义: CPU执行的基本操作
- 分类:
- 数据传送指令
- 算术运算指令
- 逻辑运算指令
- 控制转移指令
- 位操作指令
- 字符串操作指令
- 系统调用指令
2.2 寄存器
- 定义: CPU内部存储数据的单元,速度快
- 通用寄存器:
- x86 (例如:EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP, R8-R15)
- ARM (例如:R0-R15, SP, LR, PC)
- 段寄存器 (x86):
- 状态寄存器:
2.3 内存
- 内存模型:
- 堆 (Heap)
- 栈 (Stack)
- 数据段 (Data Segment)
- 代码段 (Code Segment)
- 直接寻址
- 寄存器寻址
- 间接寻址
- 基址变址寻址
- 比例变址寻址
2.4 伪指令
- 定义: 汇编器使用的指令,不直接被CPU执行
- 作用:
- 示例:
db
, dw
, dd
, dq
(定义数据)
equ
(定义常量)
segment
, ends
(定义段)
2.5 汇编程序结构
- 基本结构:
- 数据段 (Data Segment)
- 代码段 (Code Segment)
- 栈段 (Stack Segment)
- 声明段名
- 定义段属性
- 结束段定义
三、 常用指令
3.1 数据传送指令
MOV
: 传送数据
PUSH
: 入栈
POP
: 出栈
LEA
: 加载有效地址
XCHG
: 交换数据
3.2 算术运算指令
ADD
: 加法
SUB
: 减法
MUL
: 乘法
DIV
: 除法
INC
: 自增
DEC
: 自减
3.3 逻辑运算指令
AND
: 逻辑与
OR
: 逻辑或
XOR
: 逻辑异或
NOT
: 逻辑非
SHL
/SAL
: 左移
SHR
: 逻辑右移
SAR
: 算术右移
ROL
: 循环左移
ROR
: 循环右移
3.4 控制转移指令
JMP
: 无条件跳转
JE
/JZ
: 等于/零则跳转
JNE
/JNZ
: 不等于/非零则跳转
JG
/JNLE
: 大于/非小于等于则跳转
JL
/JNGE
: 小于/非大于等于则跳转
JGE
/JNL
: 大于等于/非小于则跳转
JLE
/JNG
: 小于等于/非大于则跳转
CALL
: 调用子程序
RET
: 子程序返回
INT
: 中断调用
IRET
: 中断返回
3.5 字符串操作指令
MOVS
: 传送字符串
CMPS
: 比较字符串
SCAS
: 扫描字符串
LODS
: 加载字符串
STOS
: 存储字符串
四、 汇编程序设计
4.1 编程思路
4.2 常见编程技巧
4.3 调试技巧
- 使用调试器
- 设置断点
- 单步执行
- 查看寄存器和内存
- 使用日志输出
五、 应用领域
5.1 操作系统
5.2 嵌入式系统
5.3 逆向工程
5.4 游戏开发
5.5 编译器