组成原理(六):指令系统之 指令类型
指令类型分为数据传送类指令、运算类指令、程序控制类指令、输入输出指令。
1、数据传送类指令
数据传送类指令具有数据复制的性质,即数据从源地址传送到目的地址,而源地址中的内容保持不变。
1.1、一般传送指令
一般传送类指令常用助记符MOV表示,根据传送的源和目的不同,又可分为以下几种传递方式:主存单元之间的传送、从主存单元传送到寄存器、从寄存器传送到主存单元、寄存器之间的传送。
1.2、堆栈操作指令
堆栈操作指令分为 进栈(PUSH) 和 出栈(POP)。
1.3、数据交换指令
数据传送可以是双向的,源操作数与目的操作数(一个字节或一个字)相互交换位置。
2、运算类指令
2.1、算术运算类指令
算术运算指令主要用于定点和浮点运算。这类运算包括加、减、乘、除、比较等。
算术运算指令标志位:进位、溢出、正负和奇偶。
指令系统中出去普通的加、减指令外,一般都设置了带进位加和带借位减指令。
2.2、逻辑运算类指令
逻辑运算类指令是对 与、或、非和异或等逻辑运算的指令,
2.3、移位类指令
移位指令分为算术移位、逻辑移位和循环移位,又可分为左移和右移。
算术移位 |
带符号数,移位过程中操作数符号不变 |
|
逻辑移位 |
对象是无符号数,移位无须考虑符号问题 |
|
循环移位 |
是否与进位位一起循环,分为小循环(不带进位自环)、大循环(带进位循环) |
小循环:
大循环:
|
3、程序控制类指令
程序控制类指令用于控制程序的执行顺序,并使程序具有测试、分析与判断的能力。主要包括转移指令、子程序调用和返回指令。
3.1、转移指令
程序执行过程中,采用转移指令改变程序的执行顺序。转移指令分为 无条件转移 和 条件转移 两种。
无条件转移,又称必转,执行时改变程序的常规执行顺序,不受任何条件约束,助记符为JMP。
条件转移必须受到条件的约束,若满足指令规定的条件,则程序转移;否则,程序仍顺序执行。
条件转移采用相对寻址方式,转移地址为当前指令地址(PC)和指令中的位移量之和,PC + 位移量 → PC。
3.2、子程序调用指令
子程序是一组可以公用的指令序列。
调用其他程序的程序是主程序,被其他程序调用的程序是子程序。
子程序调用指令,从主程序转向子程序的指令,简称转子指令,助记符CALL。
转子指令是地址指令。
转移指令与转子指令的区别:
转移指令 |
转子指令 |
使程序转移到新的地址后继续执行指令,没有返回地址 |
必须以某种方式保存返回地址,以便返回时能找到原来的位置 |
实现同一程序内的转移 |
实现不同程序之间的转移 |
转子指令中的返回地址是下一条指令的地址,保存返回地址的方式:
用子程序的第一个子单元存放;
用寄存器存放;
用堆栈保存返回地址。
3.3、返回指令
从子程序转向主程序的指令称为返回指令,助记符为RET。子程序的而最后一条指令一定是返回指令。
通常返回地址保存在堆栈中,所以返回指令常是零地址指令。
4、输入输出指令
输入输出(I/O)类指令用来实现主机与外部设备之间的信息交换,包括输入输出数据、主机向外设发控制命令或外设向主机报告工作状态等。
I/O指令的编址方式:独立编址 和 统一编址。
4.1、独立编址的I/O指令
独立编址方式使用专门的输入输出指令(IN/OUT)。以主机为基准,信息由外设传送给主机,称为输入,反之称为输出。
指令中应给出外部设备编号(端口地址),此端口地址与主存地址无关,是另一个独立的地址空间。
4.2、统一编址的I/O指令
把外设寄存器和主存单元同一编址。用一般的数据传送类指令来实现I/O操作。
一个外部设备至少有两个寄存器;数据寄存器 及 命令与状态寄存器。
每个外设寄存器都可由分配给它们的唯一的主存地址来识别。
4.3、编址方式比较
优缺点 |
独立编址方式 |
统一编址方式 |
优点 |
I/O指令和访存指令容易区分,外设地址线少,译码简单,主存空间不会减少 |
总线结构简单,全部访存类指令都可用于控制外设,可直接对外设寄存器进行各种运算 |
缺点 |
控制线增加了I/O Read 和 I/O Write信号 |
占用主存一部分地址,缩小了可用的主存空间 |