指令格式
1. 前缀(Prefixes)
- 功能:前缀用于修改指令的行为,如指定特定的寻址模式或指定段寄存器等。
- 类型:
- 数据宽度前缀:如
BYTE PTR
、WORD PTR
,指定操作数的数据宽度。 - 重复前缀:如
REP
、REPE
、REPZ
,用于重复执行某些指令直到条件满足。 - 段超越前缀:如
ES:
、CS:
、SS:
、DS:
,指定不同的段寄存器。 - 操作数大小前缀:如
LOCK
、REP
,控制锁存状态或重复执行。
- 数据宽度前缀:如
2. 操作码(Opcode)
- 功能:定义了要执行的操作,如算术运算、逻辑运算、数据传输等。
- 示例:
ADD AX, BX
:将AX寄存器的值与BX寄存器的值相加,结果存入AX。MOV AX, [BX+SI]
:将内存地址[BX+SI]处的数据移动到AX寄存器。
3. 模态字节(Mod R/M byte)
- 功能:指示源或目的操作数的位置。
- 组成:
- Mod字段:指示寻址模式。
- Reg字段:指定寄存器。
- R/M字段:指定寄存器或内存地址。
4. 位移量(Displacement)
- 功能:是一个8位或16位的偏移量,用于计算实际的内存地址。
- 示例:
MOV AX, [BX + 100H]
:将内存地址[BX + 100H]处的数据移动到AX寄存器。
5. 立即数(Immediate data)
- 功能:如果指令需要一个立即数作为操作数。
- 示例:
MOV AX, 2000H
:将立即数2000H赋值给AX寄存器。
操作数的来源
操作数可以来自多个不同的来源:
1. 立即数(Immediate Data)
- 定义:立即数是指直接写入指令中的数值。
- 特点:
- 不需要访问内存或寄存器。
- 执行速度快。
- 示例:
MOV AX, 2000H
2. 寄存器(Registers)
- 定义:寄存器是CPU内部的小型存储单元。
- 特点:
- 速度快,直接在CPU内部处理。
- 示例:
ADD AX, BX
3. 存储器(Memory)
- 定义:操作数位于内存中的某个位置。
- 特点:
- 需要读取或写入内存。
- 执行速度较慢。
- 示例:
MOV AX, [BX+SI]
4. I/O 端口(I/O Ports)
- 定义:用于与外部设备通信的端口。
- 特点:
- 通常用于输入输出操作。
- 示例:
IN AL, 60H
操作数的数量
指令可以有不同数量的操作数:
1. 无操作数(No Operands)
- 定义:不需要任何操作数。
- 示例:
HLT
2. 单操作数(Single Operand)
- 定义:只有一个操作数。
- 示例:
NOT AX
3. 双操作数(Dual Operands)
- 定义:有两个操作数。
- 示例:
SUB AX, BX
操作数的类型
操作数可以有不同的类型:
1. 8位寄存器(8-bit Registers)
- 定义:常见的8位寄存器包括AL、AH、BL、BH、CL、CH、DL 和 DH。
- 示例:
XOR AL, 0FFH
2. 16位寄存器(16-bit Registers)
- 定义:常用的16位寄存器包括AX、BX、CX 和 DX。
- 示例:
CMP AX, BX
3. 指针和索引寄存器(Pointer and Index Registers)
- 定义:包括BP、SI 和 DI,常用于寻址。
- 示例:
MOV SI, 1000H
4. 段寄存器(Segment Registers)
- 定义:包括CS、DS、SS 和 ES,用于分段寻址。
- 示例:
MOV ES, AX
5. 存储器地址(Memory Addresses)
- 定义:通过寄存器组合或其他寻址方式计算得出。
- 示例:
MOV AX, [BX + 100H]
寻址方式
寻址方式用于确定操作数的实际内存地址:
1. 直接寻址(Direct Addressing)
- 定义:操作数的地址直接出现在指令中。
- 示例:
MOV AX, [2000H]
2. 寄存器间接寻址(Register Indirect Addressing)
- 定义:使用寄存器的内容作为内存地址。
- 示例:
MOV AX, [BX]
3. 寄存器相对寻址(Register Relative Addressing)
- 定义:基址寄存器加上一个位移量。
- 示例:
MOV AX, [BX + 100H]
4. 基址加变址寻址(Base Plus Index Addressing)
- 定义:使用基址寄存器和变址寄存器的组合。
- 示例:
MOV AX, [BX + SI]
5. 比例缩放寻址(Scaled Index Addressing)
- 定义:在变址寻址基础上乘以一个比例因子(1, 2, 4, 8)。
- 示例:
MOV AX, [BX + SI * 4]
6. 基址加变址加比例缩放寻址(Base Plus Index Plus Scaled Index Addressing)
- 定义:结合了基址、变址和比例缩放。
- 示例:
MOV AX, [BP + DI * 2]
7. 段超越寻址(Segment Override Addressing)
- 定义:使用不同的段寄存器来定位内存区域。
- 示例:
MOV AX, ES:[BX]
下面是我根据寻址方式整理的思维导图: