计算机组成原理(9)指令系统

指令系统

机器指令
人们习惯把每一条机器语言的语句称为机器指令,而又将全部机器指令的集合称为机器的指令系统。
一、 指令的一般格式
1、指令的基本格式

计算机是通过执行指令来处理各种数据的.为了指出数据的来源,操作结果的去向及所执行的操作,一条指令必须包含下列信息:

(1)操作码,具体说明了操作的性质及功能.

(2)操作数的地址.

(3)操作结果的存储地址.

(4)下一条指令的地址.

从上述分析可知,一条指令实际上包括两种信息即操作码和地址码。

操作码(operation code)用来表示该指令所要完成的操作(如加,减,乘,除,数据传送等),其长度取决于指令系统中的指令条数.如操作码占7位,则该机器最多包含27=128条指令.

地址码用来描述该指令的操作对象,或直接给出操作数或指出操作数的存储器地址或寄存器地址(即寄存器名).

操作码的长度不固定会增加指令译码和分析难度,使控制器的设计复杂.

2、指令的执行过程
(1)读取指令

指令地址(在PC中)送到地址寄存器

读主存,读出内容(指令代码)送入指令寄存器IR

(2) 分析指令

形成下一条指令的地址并送到PC中

(3)执行指令

用一到几个执行步骤,完成指令的运算、操作功能,

不同的指令操作步骤和具体运算、操作功能各不相同

检查有无中断请求,无中断请求、进入下一条指令的执行过程

3、定长操作码指令格式
(1)零地址指令
格式: OP

OP——操作码

指令中只有操作码,而没有操作数或没有操作数地址,这种指令有两种可能:

1)无需任何操作数,如空操作指令,停机指令等.

2)所需的操作数是默认的.如堆栈结构计算机的运算指令,所需的操作数默认在堆栈中,由堆栈指针SP隐含指出,操作结果仍然放回堆栈中.又如Intel 8086的字符串处理指令,源,目的操作数分别默认在源变址寄存器SI和目的变址寄存器DI所指定的存储器单元中.

(2)一地址指令

格式: OP A

OP——操作码

A——操作数的存储器地址或寄存器名

指令中只给出一个地址,该地址既是操作数的地址,又是操作结果的存储地址.如加1,减1和移位等单操作数指令均采用这种格式,对这一地址所指定的操作数执行相应的操作后,产生的结果又存回该地址中.

在某些字长较短的微型机中(如早期的Z80,Intel8080,MC6800等),大多数算术逻辑指令也采用这种格式,第一个源操作数由地址码A给出,第二个源操作数在一个默认的寄存器中,运算结果仍送回到这个寄存器中,替换了原寄存器内容,通常把这个寄存器称累加器.

(3)二地址指令

格式:OP A1 A2

OP——操作码

A1——第一个源操作数的存储器地址或寄存器地址。

A2——第二个源操作数和存放操作结果的存储器地址或寄存器地址。

这是最常见的指令格式,两个地址指出两个源操作数地址,其中一个还是存放结果的目的地址.对两个源操作数进行操作码所规定的操作后,将结果存入目的地址,在本例中即为A2指定的地址

(4)三地址指令

格式: OP A1 A2 A3

OP——操作码

A1——第一个源操作数的存储器地址或寄存器地址

A2——第二个源操作数的存储器地址或寄存器地址

A3——操作结果的存储器地址或寄存器地址

其操作是对A1,A2指出的两个源操作数进行操作码(OP)所指定的操作,结果存入A3中.

(5)多地址指令

在某些性能较好的大,中型机甚至高档小型机中,往往设置一些功能很强的,用于处理成批数据的指令,如字符串处理指令,向量,矩阵运算指令等.

为了描述一批数据,指令中需要多个地址来指出数据存放的首地址,长度和下标等信息。

4、扩展操作码指令格式

设某机器的指令长度为16位,包括4位基本操作码字段和三个4位地址字段,其格式下:

OP(4)   A1(4)   A2(4)   A3(4)

4位基本操作码有16个码点(即有16种组合),若全部用于表示三地址指令,则只有16条.但,若三地址指令仅需15条,两地址指令需15条,一地址指令需15条,零地址指令需16条,共61条指令,应如何安排操作码?

显然,只有4位基本操作码是不够的,必须将操作码的长度向地址码字段扩展才行.

一种可供扩展的方法和步骤如下:

(1)15条三地址指令的操作码由4位基本操作码从0000~1110给出,剩下一个码点1111用于把操作码扩展到A1,即4位扩展到8位;

(2)15条二地址指令的操作码由8位操作码从11110000~11111110给出,剩下一个码点11111111用于把操作码扩展到A2,即从8位扩展到12位;

(3)15条一地址指令的操作码由12位操作码从111111110000~111111111110给出,剩下的一个码点111111111111用于把操作码扩展到A3,即从12位扩展到16位;

(4)16条零地址指令的操作码由16位操作码从1111111111110000~1111111111111111给出.

指令字长取决于操作码的长度、操作数地址的长度和操作数地址的个数.为了提高指令的运行速度和节省存储空间,通常尽可能的吧常用的指令(如数据传输指令、算逻运算指令等)设计成单字长或短字长格式的指令。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值