指令系统——第七章(部分)

一、机器指令

  • 机器指令:机器语言的语句称为机器指令。
  • 指令系统:全部机器指令的集合称为机器的指令系统。机器的指令系统集中反映了机器的功能

1. 指令的一般格式

机器指令一般包括操作码和地址码两部分,如图:

机器指令一般格式

1. 操作码解析
  • 作用:指明该指令所要执行的操作,可能还要指出操作数的类型、寻址方式等
  • 长度:操作码的长度可能是固定的,也可能是可变的
    1. 长度固定:用于指令字长较长的情况,如IBM370
    2. 长度可变:操作码分散在指令字的不同字段中
扩展操作码技术

为什么要使用扩展操作码技术?

在指令字长确定的情况下,使用扩展操作码技术可以有效扩大指令数。这一点之后的讲解中会体现出来

扩展操作码技术有哪些?

扩展操作码技术有两种:

  1. 保留某一位作为扩展标志进行扩展
  2. 保留码点作为扩展标志进行扩展

这里介绍第二种。

保留码点作为扩展标志进行扩展

如图,假设一条指令包含了1个操作码3个地址码,指令字长为16位,操作码占4位。如图:

4位操作码指令例子

其所能产生的指令如下:

4位操作码指令条数

需要注意:

  1. 三地址指令:地址码有三个 A 1 、 A 2 、 A 3 A_1、A_2、A_3 A1A2A3
  2. 4位操作码能够生成的指令原本应该是16条,但这里仅使用了15条。原因就在于:保留了操作码1111作为扩展标志,假如OP使用的是1111,就代表占用了地址码 A 1 A_1 A1进行扩展操作码,操作码就成为8位,如下图所示:

8位操作码扩展

  • 这里同样保留了操作码1111 1111作为扩展标志,代表该指令系统仍能进行扩展。最终的扩展如下:

4位操作码最终扩展

这里需要注意到:

  1. 4位操作码指令原本仅能表示16条指令,但使用了扩展操作码技术后,能够表示61条指令。
  2. 通过扩展标志,CPU可以准确识别出指令中操作码的长度
  3. 操作码的位数随地址数的减少而增加
    1. 三地址指令操作码 每减少一种最多可多构成 2 4 2^4 24 种二地址指令
    2. 二地址指令操作码 每减少一种最多可多构成 2 4 2^4 24 种一地址指令

关于第3点的理解: 以三地址指令为例,假如我们使用操作码 1110 作为扩展标志

  1. 此时,三地址指令中少了一条(操作码位1110的一条)
  2. 对于二地址指令而言,多了以1110作为开头(扩展标志)的 2 4 2^4 24条指令(不考虑二地址指令的继续扩展)
2. 地址码解析
  • 作用:指出操作数、下一条指令等的地址
  • 对于一条指令而言,它可能有多个地址码,也可能没有地址码。其中:
    1. 包含0个地址字段的称为:零地址指令
    2. 包含1个地址字段的称为:一地址指令
    3. 包含2个地址字段的称为:二地址指令

接下来介绍不同指令中地址码的作用

1. 四地址指令

如图

四地址指令

四次访存:

  1. 取指令(上一条指令的 A 4 A_4 A4
  2. 取第一操作数
  3. 取第二操作数
  4. 存结果

若使用PC代替 A 4 A_4 A4,就成了三地址指令。每执行一条指令,PC+1(指令计数器)

2. 三地址指令

三地址指令

若用 A 1 或 A 2 A_1或A_2 A1A2代替 A 3 A_3 A3,就成为了二地址指令

3. 二地址指令

二地址指令

若使用ACC(累加器)替代 A 1 或 A 2 A_1或A_2 A1A2,将结果保存在ACC中,就成了一地址指令。

4. 一地址指令

一地址指令

  • 取指令(PC)
  • A 1 A_1 A1中的操作数
5. 零地址指令

即没有地址码的指令

2. 指令字长

指令字长取决于:

  1. 操作码的长度
  2. 操作数地址的长度
  3. 操作数的地址个数
  • 早期计算机,指令字长固定:指令字长=机器字长=存储字长
  • 现代计算机,指令字长可变:一般为字节的整数倍。其中高频指令一般被设置为短操作码指令/短字节指令
3. 小结
  • 当用一些硬件资源代替指令字中的地址码字段后
    1. 可扩大指令的寻址范围
    2. 可缩短指令字长
    3. 可减少访存次数
  • 当指令的地址字段为寄存器时
    1. 可缩短指令字长
    2. 指令执行阶段不访存

二、操作数类型和操作类型

三、寻址方式

1. 指令寻址

指令寻址有两种方式:

  1. 顺序寻址:PC指令计数器实现,每条指令执行后,PC+1,得到下一条指令地址
  2. 跳跃寻址:由转移指令指出下一条指令的地址

指令寻址

需要注意:PC+1中的1是一个指令的字长

2. 数据寻址

从数据寻址的角度看,指令的一般格式如下:

数据寻址指令一般格式

  • 寻址特征:数据寻址共有10种不同的寻址方式,寻址特征字段通过不同的符号表明该指令操作数的寻址方式
  • 形式地址A:就是数据在指令字中的地址,实际上它不是操作数的真实地址(对某些寻址方式而言)
  • 有效地址:操作数的真实地址

为了分析的简便,以下设定分析采用的模型机满足:指令字长 = 存储字长 = 机器字长

  • E A EA EA 代表操作数的真实地址
  • 均以单地址指令为例
1. 立即寻址

特征:形式地址A就是操作数。即指令中直接携带操作数,不需要访存取操作数。如图:

立即寻址

  • ==#==是立即寻址的特征
  • 立即寻址的特点:
    1. 指令执行阶段不访存(因为不需要取操作数)
    2. A 的位数限制了立即数的范围
2. 直接寻址

特征: E A = A EA=A EA=A,有效地址由形式地址直接给出。即形式地址A保存的就是操作数的真实地址。如图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MHpBxQGj-1651755353582)(https://s2.loli.net/2021/12/06/Jpk1q58hrm2EeWM.png)]

特点:

  1. 执行阶段访问一次存储器(取操作数)
  2. A 的位数决定了该指令操作数的寻址范围(做题时可根据直接寻址范围逆推A的位数)
  3. 操作数的地址不易修改(必须修改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保存的才是操作数的真实地址

间接寻址

  • 指令执行阶段访存次数:
    1. 一次寻址:2次
    2. N次寻址: N + 1 N+1 N+1
  • 可扩大寻址范围
  • 便于编制程序,可以通过修改间接存储单元中的真实地址实现修改操作数

间接寻址编程举例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tLtOcrgL-1651755353584)(https://s2.loli.net/2021/12/06/98Sq5WKZGoRQjez.png)]

主程序在201处调用子程序的执行流程分析:

  1. 主程序执行到201,发现201是一条调用子程序的指令,主程序做如下操作:
    1. 将主程序程序断点(即下一条指令202的地址)保存在存储单元==(A)==中
    2. 执行201,开始执行子程序
  2. 子程序执行完毕,遇到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,寄存器保存操作数真实地址。

寄存器间接寻址

解题步骤

  1. 确定指令格式
    • 寻址方式
    • 是否需要寻址特征字段
    • 是否需要使用操作码扩展技术
  2. 确定码长,包括指令字长和指令各字段的长度
    • 依据寻址方式的特点
  3. 具体分配指令
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值