组成原理(三):指令系统之 指令格式
指令是指示计算机执行某些操作的命令,计算机的所有指令的集合构成该机的指令系统,也称指令集。指令系统是计算机的主要属性,位于硬件和软件的交界面上。
1、机器指令的基本格式
一条指令就是机器语言的一个语句,是一组有意义的二进制代码,指令的基本格式如下:
操作码,指明了该指令的操作性质和功能;
地址码,给出了操作数的地址。
指令的长度是一条指令中所包含的二进制代码的位数,取决于操作码字段的长度、操作数地址的个数及长度。
指令长度等于机器字长的指令,称为单字长指令;指令长度等于半个机器字长的指令,称为半字长指令;指令长度等于两个机器字长的指令,称为双字长指令。
2、地址码结构
计算机执行一条指令所需要的全部信息都必须包含在指令中。
对于一般的双操作数运算类指令来说,除去操作码之外,指令还要包含以下信息:操作数地址、操作结果存放地址、下一条将要执行指令的地址。
在指令中明显给出的地址,称为显地址;隐含方式给出的地址,称为隐地址。
2.1、四地址指令
指令格式如下:
指令的含义:
(A1)OP(A2)→ A3,OP表示具体的操作,A1、A2表示地址,(A1)、(A2)表示存放于该地址中的内容。
A4 → 下一条将要执行的指令的地址。
四地址指令,直观,并且下一条指令的地址明显。但是,指令的长度太长。
2.2、三地址指令
程序计数器(Program Counter,PC)来存放指令地址。通常每执行一条指令,PC就自动加1,直接得到将要执行的下一条指令的地址,如此,指令中无需明显的给出下一条指令的地址。
引入PC,三地址格式指令:
指令的含义:
(A1)OP(A2)→ A3,OP表示具体的操作,A1、A2表示地址,(A1)、(A2)表示存放于该地址中的内容。
(PC) + 1 → PC(隐含)
执行一条三地址的双操作数运算指令,至少访问4次主存,第一次取指令,第二次取第一个操作数,第三次取第二个操作数,第四次保存运算结果。
2.3、二地址指令
二地址指令,指令执行后,目的操作数原存的内容已被破坏。指令格式如下:
指令的含义:
(A1)OP(A2)→ A1,OP表示具体的操作,A1是目的操作数地址,A2是源操作数地址。
(PC) + 1 → PC(隐含)
二地址指令,也需要至少访问4次主存。
2.4、一地址指令
一地址指令,只有一个显地址,另一个隐含的操作数存放在累加寄存器中(Accumulator, ACC)。引入Acc,指令格式:
指令含义:
(Acc)OP(A2)→ Acc
(PC) + 1 → PC(隐含)
执行一条一地址指令的双操作数运算指令,只需要访问两次主存。第一次取指令本身,第二次取操作数。第一操作数和运算结果放在累加寄存器中,因此,读取和存入不需访问主存。
2.5、零地址指令
零地址指令格式中,只有操作码,没有地址码字段,指令格式如下:
零地址的算术逻辑类指令是在堆栈计算机中,堆栈计算机没有一般计算机中必备的通用寄存器,参加算术逻辑原酸的两个操作数隐含的从堆栈顶部弹出,送到运算器中进行原酸,运算的结果再隐含的压入堆栈。
2.6、地址指令比较
3、指令的操作码
指令系统中每一条指令都有一个唯一确定的操作码,指令不同,操作码的编码也不同。
操作码的编码分为 规整型 和 非规整型 两类编码。
3.1、规整性编码 - 定长编码
操作码的字段和位置是固定的,无论指令长度是多少位,操作码字段都是一样的。
指令格式如下:
3.2、非规整性编码 - 变长编码
变长编码的操作码字段的位数不固定,且分散的存放在指令字的不同位置上。
这种方式能有效的压缩指令中操作码字段的平均长度。适用于字长较短的小型、微型计算机。
指令格式如下:
最常用的非规整型编码方式是拓展操作码法。
若指令长度一定,地址码和操作码字段长度互相制约,为解决此锚段,让操作数地址个数多的指令操作码短些,操作数地址少的指令操作码长。如此既能充分利用指令的各个字段,又能在不增加指令长度的情况下拓展操作码的位数,使它能表示更多的指令。