指令的操作类型
不同架构的计算机,其结构、性能、应用领域是不同的,所采用的指令系统之间的差异也是很大的。
尽管不同架构的计算机存在上述差异,但在各自采用的指令系统中,所包含的指令的基本操作类型和功能是相似的。
指令的操作类型
- 不同架构的计算机,其结构、性能、应用领域是不同的,所采用的指令系统之间的差异也是很大的。
- 尽管不同架构的计算机存在上述差异,但在其各自采用的指令系统中,所包含的指令的基本操作类型和功能是相似的。
数据传送指令
- 数据传送指令是最基本、最常用的指令。
- 数据传送指令主要完成两个部件之间的数据传送操作。
- 寄存器与寄存器之间的数据传送
- 寄存器与存储器之间的数据传送
- 有的计算机采用通用的MOV指令实现数据传送操作。
- 有的计算机采用LOAD指令从主存单元读取数据到寄存器;采用STORE指令将寄存器中的数据写入主存单元。
- 数据传送指令可以以字节、字、双字为单位进行数据传送。有的指令系统甚至还支持成组数据传送(例如Intel x86的指令系统)。
算术和逻辑运算指令
- 算术运算指令:完成二进制数的加、减、乘、除等运算。
- 常见的有:ADD(加)、SUB(减)、MUL(乘)、DIV(除)、INC(加 1)、DEC(减 1)、NEG(取负)。
- 可能包括定点数和浮点数运算指令。
- 逻辑运算指令:完成按位逻辑运算。
- 常见的有:AND(与)、OR(或)、NOT(非)、XOR(异或)。
- 可用于位测试、位清零、位设置等操作。
- 结果与标志位:运算结果通常存放在通用寄存器或存储器中,同时会影响 CPU 的状态标志寄存器(如 EFLAGS/PSW 中的进位标志 C、零标志 Z、符号标志 S、溢出标志 O 等)。
移位操作指令
- 移位操作指令:对操作数的二进制位进行左移或右移操作。
- 主要类型:
- 逻辑移位 (Logical Shift):
- 左移 (SHL):低位补 0,高位移出的位进入进位标志 C。相当于无符号数乘以 2 的幂。
- 右移 (SHR):高位补 0,低位移出的位进入进位标志 C。相当于无符号数除以 2 的幂。
- 算术移位 (Arithmetic Shift):
- 左移 (SAL):与逻辑左移相同,低位补 0,高位移出的位进入进位标志 C。
- 右移 (SAR):高位补符号位(保持原符号不变),低位移出的位进入进位标志 C。相当于带符号数除以 2 的幂。
- 循环移位 (Rotate Shift):
- 不带进位的循环移位 (ROL/ROR):移出的位从另一端补入。
- 带进位的循环移位 (RCL/RCR):移出的位进入进位标志 C,同时进位标志 C 的内容补入空出的位。
- 逻辑移位 (Logical Shift):
程序控制指令
- 程序控制指令:用于改变程序执行的顺序,实现程序的流程控制。
- 主要功能:
- 条件转移指令 (Conditional Jump/Branch):根据 CPU 状态标志位(如零标志 Z、进位标志 C、符号标志 S 等)的组合条件决定是否进行跳转。
- 例如:JZ(为 0 则跳转)、JNZ(不为 0 则跳转)、JC(有进位则跳转)、JNC(无进位则跳转)、JG(大于则跳转)、JL(小于则跳转)等。
- 无条件转移指令 (Unconditional Jump/Branch):直接改变程序计数器 PC 的值,无条件地跳转到指定地址执行。
- 例如:JMP(跳转)。
- 子程序调用与返回指令 (Subroutine Call and Return):
- CALL(调用):将当前指令的下一条指令地址(返回地址)压栈,然后跳转到子程序入口执行。
- RET(返回):从栈中弹出返回地址,并跳转到该地址继续执行。
- 中断与返回指令 (Interrupt and Return):
- INT(中断):保存当前 CPU 状态信息(如程序计数器 PC、标志寄存器等),跳转到中断服务程序执行。
- IRET(中断返回):恢复之前保存的 CPU 状态信息,从中断服务程序返回到被中断的程序继续执行。
- 空操作指令 (No Operation):NOP,不执行任何操作,仅占用一个时钟周期。
- 停机指令 (Halt):HLT,使 CPU 停止工作,进入等待状态。
- 条件转移指令 (Conditional Jump/Branch):根据 CPU 状态标志位(如零标志 Z、进位标志 C、符号标志 S 等)的组合条件决定是否进行跳转。

输入输出指令
- 输入输出指令:用于 CPU 与外部 I/O 设备之间的数据传输。
- 编址方式:
- 统一编址 (Memory-mapped I/O):I/O 端口被视为存储器的一部分,CPU 可以使用普通的数据传送指令(如 MOV)访问 I/O 端口。
- 独立编址 (Isolated I/O):I/O 端口拥有独立的地址空间,CPU 需要使用专门的 I/O 指令(如 IN/OUT)来访问 I/O 端口。
- 常见指令:
- IN(输入):从指定的 I/O 端口读取数据到寄存器。
- OUT(输出):将寄存器中的数据写入指定的 I/O 端口。
其他指令
- 处理机控制指令 (Processor Control Instructions):用于控制 CPU 的工作状态,如:
- STI/CLI(设置/清除中断允许标志):控制中断的开启与关闭。
- HLT(停机):使 CPU 进入停止状态。
- WAIT/FWAIT(等待):使 CPU 等待外部事件发生。
- 特权指令 (Privileged Instructions):只能在操作系统内核态(管态/特权态)下执行的指令,用于管理系统资源和保护系统安全,如设置中断向量、修改保护模式寄存器等。
- 字符串处理指令 (String Manipulation Instructions):对内存中的字符串或数据块进行快速操作,如复制、比较、填充、搜索等。
- 例如(Intel x86):MOVSB/MOVSW/MOVSD(移动字符串)、CMPSB/CMPSW/CMPSD(比较字符串)、STOSB/STOSW/STOSD(存储字符串)等。
- 浮点运算指令 (Floating-Point Instructions):在带有浮点处理单元(FPU)的 CPU 中,提供对浮点数的加、减、乘、除、平方根、三角函数等复杂运算。
- 向量/多媒体指令 (Vector/Multimedia Instructions):支持单指令多数据(SIMD)并行处理,用于加速图形、图像、音频、视频等多媒体数据的处理,如 SSE, AVX 等指令集。
- 十进制调整指令 (Decimal Adjustment Instructions):用于对 BCD 码(二进制编码的十进制数)进行算术运算后的调整,以确保结果仍为正确的 BCD 码格式。
习题



- 法二

- 法三(最快)
补码加减法溢出检测