【计算机组成原理】第四章·指令系统

本文详细介绍了计算机指令系统,包括指令的基本格式,如操作码和地址码的构成,以及各种类型的指令如零地址、一地址至四地址指令。同时阐述了指令的寻址方式,如顺序、跳跃、数据寻址的不同类型及其优缺点。

1.指令系统

1.1.指令的基本格式

指令是计算机执行某种操作的命令,是计算机运行的最小功能单位

指令格式:一条指令通常包括操作码字段(OP)和地址码字段两部分(A)组成

其中,操作码用于识别指令,地址码用于给出被操作信息的地址。指令字长与机器字长没有固定的关系,半字长指令,单字长指令则表明指令字长是机器字长的多少倍;根据指令中操作数地址码的数目不同,可以将指令分成以下类:

1.零地址指令

该指令无需知名操作数,只给出OP操作码;通常用于:1.无需操作数的指令(如空指令,停机指令)2.堆栈计算机中,操作数隐藏在栈顶和次栈顶,计算结果压入栈顶。

2.多地址指令

一地址指令: OP+A1  该指令通常用于:1.单操作数指令(自增自减求反补等)2.两个操作数,其中一个操作数隐含在寄存器中

二地址指令:OP+A1+A2  该指令用于有两个操作数的运算,需要分别给出目的操作数(A1)和源操作数(A2)

三地址指令:OP+A1+A2+A3  该指令通常用于两个操作数运算,并将结果放入A3中

四地址指令:OP+A1+A2+A3+A3  该指令在三地址指令的基础上,增加了下一条指令的地址(A4)

指令的操作类型有:1.数据传送 2.算数逻辑操作 3.移位操作 4.转移操作 5.IO操作

1.2.扩展操作码指令格式

在指令字长受限的情况下仍保持丰富的指令类型,通常采用变长操作码的方式,即指令操作码位数不固定且分散在指令字的不同位置上,这种方法使得译码和分析的难度增大,电路设计更复杂。常见的变长操作码的方式上扩展操作码,即采用定长指令结构+可变长操作码

例:指令字长为16位,地址码占4位  OP+A1+A2+A3

前四位基本操作码若全用于指令地址,则有16条指令,但将1111保留作扩展操作码,则三地址指令只有15条操作码

将1111 1111保留作扩展操作码,二地址指令有15条操作码

将1111 1111 1111保留作扩展操作码,一地址指令有15条操作码

而零地址指令包含全部16条指令操作码

注意:1.不允许短码是长码的前缀 2.各指令操作码不能重复 3.频率更高的指令应使用更短的操作码


2.指令的寻址方式

2.1.指令寻址和数据寻址

2.1.1.指令寻址

指令寻址是指找到下一条将要执行的指令的地址,指令寻址的方式有两种:

1.顺序寻址:通过程序计数器PC+1(1个指令字长)自动形成下一条指令的地址

2.跳跃寻址:通过转移类指令给出下一条要指令的指令地址

2.1.2.数据寻址

数据寻址是指找到本条指令所指的数据地址,指令格式为:操作码+寻址特征+形式地址(A);常见的有十种寻址类型:

1.直接寻址:EA=A,即指令字中的形式地址A是操作数的真实地址,该方法的优点是指令简单,在指令执行阶段只需访问一次主存,但灵活性差

2.间接寻址:EA=(A),即指令字中的形式地址A是操作数所在存储单元的地址,该方法优点是扩大寻址范围,便于编制程序,缺点是在指令执行阶段需要进行多次访存且访问速度过慢

3.寄存器寻址:EA=Ri,即指令中给出的形式地址是操作数所在寄存器的编号,优点在于执行阶段不访存且执行速度快,但是寄存器价格昂贵且个数有限

4.寄存器间接寻址:EA=(Ri),即寄存器中给出的是操作数所在主存单元的地址,比一般间接寻址更快,但指令的执行阶段需要访存

5.隐含寻址:指令中隐含操作数的地址,例如单地址指令ACC累加器运算操作,该优点是利于缩短指令字长,缺点在于需要增加存储操作数的硬件

6.立即寻址:指令中形式地址A就是操作数本身,立即寻址特征为#,该方法执行速度最短且不访存,但A的位数限制了立即数的范围

偏移寻址:

7.基址寻址:EA=(BR)+ A,将CPU中基址寄存器(BR)的内容加上指令中形式地址A形成操作数的有效地址,其中基址寄存器是面向操作系统的,其内容由操作系统决定。该方式的优点在于扩大寻址范围,利于多道程序设计,但偏移量A的位数较短

8.变址寻址:EA=(IX)+ A,将形式地址A与变址寄存器中的地址相加得到有效地址EA,变址地址是面向用户的,用户可以自行更改IX中的值作为偏移量,该方法的优点是扩大寻址范围,适合处理数组与循环程序且IX的位数足以表示整个存储空间

9.相对寻址:EA=(PC)+ A(PC=PC+1),即把程序计数器PC中的内容加上形式地址A形成新的有效地址,注意PC在取完指令后会自动执行+1,A为相对于PC的偏移量,用补码表示,该方法广泛运用于转移指令

堆栈寻址:

10.堆栈寻址:操作数放在堆栈中,隐含使用堆栈指针SP作为操作数地址(压栈出栈操作不同,进栈先压入数据(A)->Msp  后修改指针(SP)-1->SP,出栈先修改指针(SP)+1->SP  后弹出数据(Msp)->A)


4.3.程序的机器级代码表示

见"函数栈桢的创建与销毁"

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hehelm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值