目录
一、指令结构
二、操作码编码
1、概述
2、操作码的三种编码方案
1.定长编码
2、Huffman编码
3、扩展操作码编码
三、地址码编码
1.概述
2.不同操作数的指令格式
2.1四地址
2.2三地址
2.3二地址
2.4一地址
2.5零地址
四、指令字长
1、定义
2、指令字长决定因素
指令字(简称指令)即表示一条指令的机器字。 指令格式则是指令字用二进制代码表示的结构形式,由操作码字段和地址码字段组成。
通常情况下,一条指令要由两部分内容组成,其格式为:
第一部分,是指令的操作码。操作码用于指明本条指令的操作功能。计算机需要为每条指令分配一个确定的操作码。
第二部分,是指令的操作数地址,用于给出被操作的信息(指令或数据)的地址,包括参加运算的一或多个操作数所在的地址,运算结果的保存地址,程序的转移地址、被调用的子程序的入口地址等。在一条指令中,如何分配这两部分所占的位数(长度),如何安排操作数的个数,如何表示和使用一个操作数的地址(寻址方式),是要认真对待、精心设计的重要问题。
指令系统的每一条指令都有一个操作码,它表示该指令应进行什么性质的操作。
不同的指令用操作码字段的不同编码来表示,每一种编码代表一种指令。
对于一个机器的指令系统,在指令字中操作码字段和地址码字段长度通常是固定的。在单片机中,由于指令字较短,为了充分利用指令字长度,指令字的操作码字段和地址码字段是不固定的,即不同类型的指令有不同的划分,以便尽可能用较短的指令字长来表示越来越多的操作种类,并在越来越大的存储空间中寻址。
(1)定长定域(操作码字段的长度和位置固定)。
(2)操作码个数,n为编码位数
(3)优点:规整、译码简单
(4)缺点:浪费信息量(编码总长位数增加)
(1)Huffman编码法是1952年由Huffman首先提出的一种编码方法。
(2)前提:必须先知道各种指令在程序中出现的概率。
(3)方法:根据所给的各种指令使用频率,把它们从小到大依次排好作为叶结点(相同的频率可任取一个排在前),然后把最小的两个结点值(频率)相加,形成一个新结点,以这个结点的值与其他的叶结点值比较大小,仍旧取最小的两个结点值合并产生新结点,直到最终合并为一个根。 从小到大排序,最小两个合并,重复上述过程,只剩一个结束。 编码时,从根结点开始向下,凡左边分支都编为“1”,右边分支都编为“0”(也可取反),则从根结点到叶结点的一条路径上的编码组合就是该指令的霍夫曼编码。
(4)霍夫曼树不是唯一的,但所得的平均码长应是一样的。
(5)相关的定义:
1.Huffman编码的操作码最短平均长度可以通过如下公式计算:
Pi表示第i种操作码在程序中出现的概率,一共有n种操作码。
2.固定长度操作码相对于Huffman编码的信息冗余量:
3.Huffman编码的操作码平均长度:
Pi表示第i种操作码在程序中出现的概率,Li表示第i种操作码的二进制位数,一共有n种操作码。
例:
操作码的最短长度 H=0.450×1.152+0.300×1.737+0.150×2.737+0.050×4.322 +0.030×5.059+0.01×6.644+0.010×6.644=1.95(位)
操作码平均长度 H=0.45×1+0.30×2+0.15×3+0.05×4+0.03×5+0.01×6 +0.01×6=1.97(位)
3位定长编码信息冗余量:R=1-H/3=1-1.95/3≈35%
Huffman编码的信息冗余量:R=1-1.95/1.97≈1%
(6)优点:操作码的平均长度最短,信息的冗余量最小。
(7)缺点:这种编码方法所形成得操作码很不规整。在上面这个例子中,7条指令就有6种不同长度得操作码。这样,既不利于硬件的译码,也不利于软件的编译。另外,它也很难与地址码配合,形成有规则长度的指令编码
(1)固定长操作码与Huffman编码法相结合,对码长进行限制。
(2)扩展操作码编码的衡量标准:看那种编码方法的平均码长最短。
注:(1)不允许短码是长码的前缀,即短操作码不能与长操作码的前面部分的代码相同 。
(2)各指令的操作码一定不能重复。
(3)通常情况下,对使用频率较高的指令,分配较短的操作码;对使用频率较低的指令,分配较长的操作码。从而尽可能减少指令译码和分析时间。
例:设指令字长度固定为16位,操作数地址码4位,试设计一套指令系统满足:
设地址长度为n,上一层留出m种状态,下一层可扩展出种状态。
根据一条指令中有几个操作数地址,可将该指令称为几操作数指令或几地址指令。
一般的操作数有被操作数、操作数及操作结果这三种数,因而就形成了三地址指令格式。在此基础上,后来又发展成二地址格式、一地址格式和零地址格式。即目前的计算机系统中,地址码的个数通常有3个、2个、1个及0个等4种情况。
评价指令中地址个数的标准主要有两个,一是程序的存储量,即程序中所有指令的长度相加的总和最短。二是程序的执行速度,以程序在执行过程中访问主存储器的信息(包括指令和数据)量的总和最短为代表。
设指令字长为 32 位,操作码固定为 8 位
A1 第一操作数地址、A2 第二操作数地址、A3 结果的地址、A4 下一条指令地址。
(A1) OP (A2) A3
其中,OP表示操作性质,如:加、减、乘、除等;A1表示内存中地址为为A1的存储单元中的数,或者是运算器中地址为A1的通用寄存器中的数;表示把操作(运算)结果传送到指定的地方。
四地址指令需经历4 次访存,寻址范围 = 64。
在四地址指令格式的基础上,用 PC 代替 A4。
(A1) OP (A2) A3
三地址指令需经历3次访存,寻址范围 = 256。
在三地址指令的基础上,若A3 用 A1 或 A2 代替。
(A1) OP (A2) A1 或(A1) OP (A2) A2
二地址指令需经历3次访存,寻址范围 =4K。
若操作结果存于 累加寄存器ACC中(二地址R型指令),则只需要2次访存。
在二地址指令的基础上,用ACC 代替 A1(或A2)
(ACC) OP (A1) ACC
一地址指令需经历1次访存,寻址范围 =4M。
零地址指令的指令字中只有操作码,而没有地址码。(用于表示堆栈的操作)例如:停机指令就不需要地址码,因为停机操作不需要操作数。
指令字长度:一个指令字中包含二进制代码的位数。
机器字长:计算机能直接处理的二进制数据的位数,它决定了计算机的运算精度。
机器字长=指令字长,称为“单字长指令”
半个机器字长=指令字长,称为“半字长指令”
两个机器字长=指令字长,称为“双字长指令”
1.操作码的长度
2.操作数地址的长度
3.操作数地址的个数