1.指令系统基础知识
-
什么是指令系统?
连接软件与硬件的桥梁,计算机能执行的机器指令全体称为该机的指令系统
指令系统是软件编程的出发点和硬件设计的依据,它衡量机器硬件的功能,反映硬件对软件支持的程度。
-
指令的格式
操作码op + 地址码A
注意:
- 地址码可以有3个~0个地址
- 操作结果总保存在最后一个寄存器或者AC中
-
指令字长度
计算机中CPU能直接处理的二进制的位数称为机器字长;
指令字长度:一个指令字包含的所有二进制代码的位数。有等长指令字结构和变长指令字结构。注意:
- 指令长度应为存储器基本字长的整数倍
- 指令字长应尽量短
-
设计指令系统的基本思路是什么
- 确定计算机系统中的基本操作(包括操作系统和高级语言的)是由硬件实现还是由软件实现;
- 按照尽量缩短平均码长、方便译码与执行的原则,设计指令字格式。
2. 操作数类型和存储方式
-
操作数类型:
数值,字符,地址,逻辑数据
-
通常将操作码与数据类型标识合并成新的操作码。
-
操作数存储方式
操作数可以存储在指令、寄存器、堆栈和存储器中;
数据存储方式有大端(Big-Endian)和小端(Little-Endian)两种。
操作数应存储在存储器空间阵列的同一行;关于堆栈
- 分为自顶想下和自底向上两种
- 入栈和出栈的操作顺序最好做几道题试试
3. 指令系统的功能设计
- 指令的功能分类
-
复杂指令集计算机CISC(Complex Instruction Set Computer)
优点:- 使目标程序得到优化
- 给高级语言提供更好的支持
- 提供对操作系统的支持
缺点:
- 硬件资源的大量浪费
- 计算机的结构也越来越复杂
-
精简指令集计算机RISC(Reduced Instruction Set Computer)
优点:- 指令数目较少,一般都选用使用频度最高的一些简单指令
- 指令长度固定,指令格式种类少,寻址方式种类少;
- 大多数指令可在一个机器周期内完成;
- 通用寄存器数量多,只有存数/取数指令访问存储器,而其余指令均在寄存器之间进行操作。 .
缺点:
- 指令数量少,固然使编译工作量加大
4. 寻址方式
-
指令格式 OP 寻址特征MOD 形式地址D
-
指令如何指定操作数或操作数地址称为寻址方式。
- 操作数的寻址方式主要解决的是操作数存放在指令、寄存器和存储器中的寻址问题。
(1)常用的寻址方式
1.立即寻址 操作数作为指令的一部分
MOV DX,100H ; (DX)←100H
不需要寻址,数组为指令一部份
2.直接寻址 指令直接给出操作数(有效)地址;即EA=A
MOV AX,[100] ; (AX)←(100)
MOV AX,VAR ; (AX)←(VAR)
给出地址,直接取书
3.存储器间接寻址 操作数地址在内存中;即EA =(A)
4.寄存器(直接)寻址 指令地址码字段给出存放操作数的寄存器编号; 即data=(R)
ADD AX,BX ; (AX)←(AX)+(BX)
5.寄存器间接寻址 操作数地址在指令指定的CPU某个寄存器中;
6.相对寻址 操作数地址为程序计数器PC中的内容与位移量A之和,即EA=(PC)+ A。
7.基址寻址 把由指令中给出的地址(位移量)与CPU中的某个基址寄存器相加而得到实际的操作数地址。
8.寄存器变址寻址 操作数地址为变址寄存器中的内容与位移量之和;即EA=(R) 变址+A。
MOV AL,[SI+1000H]
变址寻址主要解决程序内部的循环问题;
基址寻址则要求基址寄存器的内容能提供整个主存范围的寻址能力;
在多道程序运行环境下,实现程序的再定位。
9.隐含寻址方式 指令没有明显地给出操作数地址,而在操作码中隐含 着操作数地址。如操作数隐含在累加器,堆栈内。
10.其它寻址方式
11.变址寻址 变址寄存器+位移量
间接寻址 地址码为操作数地址
转移寻址 (IF05H+2+001AH)=1F21H。
(2)寻址方式的设计
-
寻址方式设计的主要内容:
- 指令系统的寻址方式集,是指令系统支持的寻址方式的集合;
- 指令系统中每条指令的寻址方式子集,即每条指令支持的寻址方式的集合;
- 寻址方式集中每种寻址方式的性能参数。
-
寻址方式集的设计(常用&必须)
-
指令寻址方式子集设计
指令寻址方式子集与指令系统寻址方式集的设计区别
- 寻址方式子集设计不存在必须的寻址方式问题
- 指令系统寻址方式集的设计是针对所有指令进行的,而指令寻址方式子集设计是针对某条具体的 指令进行的。
- 寻址方式性能参数设计
性能参数是指该寻址方式满足应用需求所需要的操作数或操作数地址码位数。
5.指令字格式设计
(1) 指令系统指令数目设计
- 指令系统功能集中包含多少个操作,指令集中就必须对应多少条指令;
- 指令系统中指令数为功能集中操作的数量加上同一操作对应多种数据类型所增加出来的指令的数量
(2) 指令字操作码编码设计
- 定长操作码编码 定长操作码编码中所有操作码的长度固定;
- 变长操作码编码 变长操作码编码中使用频率较高的操作码长度较短,使用频率较低的操作码长度较长;
(3) 指令字寻址方式表示设计
- 寻址方式的表示方法
- 将寻址方式标志编码于操作码中;
- 在地址码字段为每个操作数设置一个地址描述符,由该地址描述符表示该操作数的寻址方式。
(4) 指令字格式设计
- 设计任务是确定指令系统中各指令的具体组成格式,同时使指令字格式具有较好的性能/价格比。
-
变长编码格式
该编码格式的指令字有多种长度;
可以有效地减少指令系统中指令字的平均长度,降低目标代码的长度;
但会使各指令字长短不一,增加了译码器的实现难度和译码时间;
各指令执行时间悬殊较大,不利于流水和并行处理技术的应用。 -
定长编码格式
指令字长度均相同; 当指令数量和寻址方式较少时,可以有效地减少指令译码的复杂性和提高译码速度;
指令寻址方式少,执行速度较快,很适合流水和并行处理技术的应用;
但会使各指令字空间的利用率不够高,增加了目标代码的长度;
令操作码采用变长编码格式,寻址方式在操作码中表示;指令系统指令数量和寻址方式种类较少, 多用于RISC计算机。
*混合编码格式
指令字长度只有有限的几种;
通过提供几种指令字长度,期望兼顾目标代码长度和降低译码复杂性这两个目标;
对流水和并行处理技术的应用方便性一般;
指令操作码和寻址方式表示与变长编码方式基本一致,指令数量和寻址方式种类适中。
IBM 360/370和Intel 80x86均采用这种编码方式。
6.指令系统举例
7.解题思路
- 如何组织操作码字段的编码?
首先约定操作类型的编码
其次约定操作数类型编码
第三约定操作数长度编码