指令系统——第七章(部分)
一、机器指令1. 指令的一般格式1. 操作码解析扩展操作码技术
2. 地址码解析1. 四地址指令2. 三地址指令3. 二地址指令4. 一地址指令5. 零地址指令
2. 指令字长3. 小结
二、操作数类型和操作类型三、寻址方式1. 指令寻址2. 数据寻址1. 立即寻址2. 直接寻址3. 隐含寻址4. 间接寻址5. 寄存器寻址6. 寄存器间接寻址
一、机器指令
机器指令:机器语言的语句称为机器指令。指令系统:全部机器指令的集合称为机器的指令系统。机器的指令系统集中反映了机器的功能
1. 指令的一般格式
机器指令一般包括操作码和地址码两部分,如图:
1. 操作码解析
作用:指明该指令所要执行的操作,可能还要指出操作数的类型、寻址方式等长度:操作码的长度可能是固定的,也可能是可变的
长度固定:用于指令字长较长的情况,如IBM370长度可变:操作码分散在指令字的不同字段中
扩展操作码技术
为什么要使用扩展操作码技术?
在指令字长确定的情况下,使用扩展操作码技术可以有效扩大指令数。这一点之后的讲解中会体现出来
扩展操作码技术有哪些?
扩展操作码技术有两种:
保留某一位作为扩展标志进行扩展保留码点作为扩展标志进行扩展
这里介绍第二种。
保留码点作为扩展标志进行扩展
如图,假设一条指令包含了1个操作码和3个地址码,指令字长为16位,操作码占4位。如图:
其所能产生的指令如下:
需要注意:
三地址指令:地址码有三个
A
1
、
A
2
、
A
3
A_1、A_2、A_3
A1、A2、A34位操作码能够生成的指令原本应该是16条,但这里仅使用了15条。原因就在于:保留了操作码1111作为扩展标志,假如OP使用的是1111,就代表占用了地址码
A
1
A_1
A1进行扩展操作码,操作码就成为8位,如下图所示:
这里同样保留了操作码1111 1111作为扩展标志,代表该指令系统仍能进行扩展。最终的扩展如下:
这里需要注意到:
4位操作码指令原本仅能表示16条指令,但使用了扩展操作码技术后,能够表示61条指令。通过扩展标志,CPU可以准确识别出指令中操作码的长度操作码的位数随地址数的减少而增加:
三地址指令操作码 每减少一种最多可多构成
2
4
2^4
24 种二地址指令二地址指令操作码 每减少一种最多可多构成
2
4
2^4
24 种一地址指令
关于第3点的理解: 以三地址指令为例,假如我们使用操作码 1110 作为扩展标志
此时,三地址指令中少了一条(操作码位1110的一条)对于二地址指令而言,多了以1110作为开头(扩展标志)的
2
4
2^4
24条指令(不考虑二地址指令的继续扩展)
2. 地址码解析
作用:指出操作数、下一条指令等的地址对于一条指令而言,它可能有多个地址码,也可能没有地址码。其中:
包含0个地址字段的称为:零地址指令包含1个地址字段的称为:一地址指令包含2个地址字段的称为:二地址指令…
接下来介绍不同指令中地址码的作用
1. 四地址指令
如图
四次访存:
取指令(上一条指令的
A
4
A_4
A4)取第一操作数取第二操作数存结果
若使用PC代替
A
4
A_4
A4,就成了三地址指令。每执行一条指令,PC+1(指令计数器)
2. 三地址指令
若用
A
1
或
A
2
A_1或A_2
A1或A2代替
A
3
A_3
A3,就成为了二地址指令
3. 二地址指令
若使用ACC(累加器)替代
A
1
或
A
2
A_1或A_2
A1或A2,将结果保存在ACC中,就成了一地址指令。
4. 一地址指令
取指令(PC)取
A
1
A_1
A1中的操作数
5. 零地址指令
即没有地址码的指令
2. 指令字长
指令字长取决于:
操作码的长度操作数地址的长度操作数的地址个数
早期计算机,指令字长固定:指令字长=机器字长=存储字长现代计算机,指令字长可变:一般为字节的整数倍。其中高频指令一般被设置为短操作码指令/短字节指令
3. 小结
当用一些硬件资源代替指令字中的地址码字段后
可扩大指令的寻址范围可缩短指令字长可减少访存次数 当指令的地址字段为寄存器时
可缩短指令字长指令执行阶段不访存
二、操作数类型和操作类型
三、寻址方式
1. 指令寻址
指令寻址有两种方式:
顺序寻址:PC指令计数器实现,每条指令执行后,PC+1,得到下一条指令地址跳跃寻址:由转移指令指出下一条指令的地址
需要注意:PC+1中的1是一个指令的字长
2. 数据寻址
从数据寻址的角度看,指令的一般格式如下:
寻址特征:数据寻址共有10种不同的寻址方式,寻址特征字段通过不同的符号表明该指令操作数的寻址方式形式地址A:就是数据在指令字中的地址,实际上它不是操作数的真实地址(对某些寻址方式而言)有效地址:操作数的真实地址
为了分析的简便,以下设定分析采用的模型机满足:指令字长 = 存储字长 = 机器字长
E
A
EA
EA 代表操作数的真实地址均以单地址指令为例
1. 立即寻址
特征:形式地址A就是操作数。即指令中直接携带操作数,不需要访存取操作数。如图:
==#==是立即寻址的特征立即寻址的特点:
指令执行阶段不访存(因为不需要取操作数)A 的位数限制了立即数的范围
2. 直接寻址
特征:
E
A
=
A
EA=A
EA=A,有效地址由形式地址直接给出。即形式地址A保存的就是操作数的真实地址。如图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MHpBxQGj-1651755353582)(https://s2.loli.net/2021/12/06/Jpk1q58hrm2EeWM.png)]
特点:
执行阶段访问一次存储器(取操作数)A 的位数决定了该指令操作数的寻址范围(做题时可根据直接寻址范围逆推A的位数)操作数的地址不易修改(必须修改A)
3. 隐含寻址
特征:操作数地址隐含在操作码中。比如之前一地址指令的例子,对于一地址的加法指令,另一个操作数隐含在ACC中。隐含寻址如图:
指令字中少了一个地址字段,可缩短指令字长。需要注意:隐含的操作数地址,实际上该操作数是通过另一条存取指令放至ACC中的
4. 间接寻址
特征:
E
A
=
(
A
)
EA =(A)
EA=(A),有效地址由形式地址间接提供。
一次间接寻址:形式地址保存一个存储单元的地址,该存储单元保存的才是操作数的真实地址N次间接寻址:形式地址保存存储单元
A
1
A_1
A1地址,
A
1
A_1
A1保存
A
2
A_2
A2的地址…最后的
A
n
A_{n}
An保存的才是操作数的真实地址
指令执行阶段访存次数:
一次寻址:2次N次寻址:
N
+
1
N+1
N+1 次 可扩大寻址范围便于编制程序,可以通过修改间接存储单元中的真实地址实现修改操作数
间接寻址编程举例
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tLtOcrgL-1651755353584)(https://s2.loli.net/2021/12/06/98Sq5WKZGoRQjez.png)]
主程序在201处调用子程序的执行流程分析:
主程序执行到201,发现201是一条调用子程序的指令,主程序做如下操作:
将主程序程序断点(即下一条指令202的地址)保存在存储单元==(A)==中执行201,开始执行子程序 子程序执行完毕,遇到JMP指令(无条件转移),该指令形式地址A存储的是存储单元==(A)的地址,(A)中保存的才是该指令真正的目的地址,此时
(
A
)
=
202
(A)=202
(A)=202==,CPU转移到主程序程序断点202处,继续执行主程序
注意:在这个过程中,JMP指令中的形式地址不变,始终指向存储单元==(A),通过改变存储单元(A)中的数据,实现调用不同的子程序==。
5. 寄存器寻址
特征:
E
A
=
R
i
EA = R_i
EA=Ri,有效地址即为寄存器编号。
执行阶段不访存,只访问寄存器,执行速度快寄存器个数有限,可缩短指令字长
R
i
R_i
Ri的位数决定存储器的个数。(逆推存储器位数)
6. 寄存器间接寻址
特征:
E
A
=
(
R
i
)
EA = ( R_i )
EA=(Ri),形式地址A保存寄存器地址
R
i
R_i
Ri,寄存器保存操作数真实地址。
解题步骤
确定指令格式
寻址方式是否需要寻址特征字段是否需要使用操作码扩展技术 确定码长,包括指令字长和指令各字段的长度
依据寻址方式的特点 具体分配指令