3.4 指令类型
本节根据指令的功能,对指令系统中的指令进行分类。
3.4.1 数据传送类指令
这类指令用于在寄存器之间、寄存器与主存之间、主存单元之间传送数据。
一般传送指令 (MOV, LOAD, STORE):
LOAD(取数): 将主存中的数据加载到寄存器。MEM -> REGSTORE(存数): 将寄存器中的数据存储到主存。REG -> MEMMOV(移动): 在寄存器之间或寄存器与主存之间传送数据。
堆栈操作指令 (PUSH, POP):
PUSH: 数据进栈。POP: 数据出栈。
数据交换指令 (XCHG): 交换两个操作数(寄存器或内存单元)的内容。
数据传送指令特点
- 不改变操作数: 源操作数在传送后内容不变(除了交换指令)
- 影响标志位: 某些传送指令可能影响标志寄存器的状态位
- 寻址方式多样: 可以使用各种寻址方式来指定源和目标
3.4.2 运算类指令
这类指令用于执行算术运算和逻辑运算。
1. 算术运算指令
基本运算:
ADD,SUB,MUL,DIV(加、减、乘、除)。INC,DEC(加1、减1)。NEG(取负): 求操作数的二进制补码。
比较指令:
CMP(比较): 比较两个操作数,结果不保存,但会影响标志寄存器中的状态标志位。- 实际执行减法运算,但不保存结果,只设置标志位。
多精度运算:
ADC(带进位加): 加法时包含进位标志CF。SBB(带借位减): 减法时包含借位标志CF。- 用于实现超过机器字长的大数运算。
2. 逻辑运算指令
基本逻辑运算:
AND,OR,NOT,XOR(与、或、非、异或)。TEST: 执行AND运算但不保存结果,只影响标志位。
应用场景:
- 置位: 用OR指令将特定位设置为1。
- 清零: 用AND指令将特定位设置为0。
- 测试: 用TEST指令检查特定位的状态。
- 取反: 用XOR指令翻转特定位。
3. 移位指令
算术移位:
- 算术左移 (SAL): 低位补0,用于带符号数乘2。
- 算术右移 (SAR): 高位补符号位,用于带符号数除2。
- 保持数的符号性质。
逻辑移位:
- 逻辑左移 (SHL): 低位补0。
- 逻辑右移 (SHR): 高位补0。
- 用于无符号数或位操作。
循环移位:
- 循环左移 (ROL): 移出的位从右端移入。
- 循环右移 (ROR): 移出的位从左端移入。
- 带进位循环移位: 将进位标志CF作为循环的一部分。
3.4.3 程序控制类指令
这类指令用于改变程序的执行顺序。
1. 转移指令
无条件转移 (JMP):
- 直接跳转到指定地址。
- 可以使用各种寻址方式确定目标地址。
条件转移 (Jcc):
- 根据标志寄存器中的状态位决定是否跳转。
- 常见条件转移指令:
JZ/JE(结果为零则跳转)JNZ/JNE(结果不为零则跳转)JC(有进位则跳转)JNC(无进位则跳转)JS(结果为负则跳转)JO(有溢出则跳转)
2. 子程序调用和返回指令
调用 (CALL):
- 跳转到子程序地址。
- 在跳转前将返回地址(CALL指令的下一条指令地址)保存到堆栈或其他约定的地方。
- 可能还需要保存现场(寄存器状态)。
返回 (RET):
- 从堆栈(或约定地方)取出返回地址。
- 跳转回调用点继续执行。
- 可能还需要恢复现场。
3. 中断相关指令
软中断指令:
INT(中断指令): 产生软件中断,用于调用操作系统服务。INT 21H: DOS系统调用。
中断返回指令:
IRET(中断返回): 从中断服务程序返回。- 需要恢复被中断程序的完整状态(PC、标志寄存器等)。
中断控制指令:
CLI(关中断): 禁止中断。STI(开中断): 允许中断。
3.4.4 输入/输出类指令 (I/O)
这类指令用于主机与外设之间的数据交换。
I/O编址方式
独立编址 (I/O映射):
- I/O端口有独立的地址空间。
- 使用专门的
IN,OUT指令。 IN AL, 60H: 从60H端口读数据到AL寄存器。OUT 61H, AL: 将AL寄存器数据输出到61H端口。
统一编址 (内存映射):
- 将I/O端口看作内存单元,使用统一的地址空间。
- 使用普通的访存指令(如
MOV,LOAD,STORE)进行操作。 - 简化了指令系统,但占用了内存地址空间。
I/O控制方式
- 程序控制I/O: CPU主动查询设备状态
- 中断驱动I/O: 设备通过中断通知CPU
- DMA方式: 直接内存访问,减轻CPU负担
易考点和难点
重点区分
- 转移指令(JMP) 和 子程序调用指令(CALL) 的核心区别在于后者需要保存返回地址。
- 算术移位 和 逻辑移位 的区别:前者保持符号位,后者简单补0。
核心考点
- 理解条件转移指令依赖于标志寄存器的状态。运算类指令的执行结果会影响标志位,而条件转移指令则根据这些标志位决定程序的流向。
- 子程序调用过程中的现场保存和恢复机制。
- 中断处理过程和相关指令的作用。
易考应用
- 多精度运算的实现(使用ADC和SBB指令)
- 位操作的典型应用(置位、清零、测试、翻转)
- 循环程序中条件转移指令的使用