指令系统

本文参考《计算机组成原理(第2版)》(唐朔飞)

指令类型

传送指令算术 / 逻辑运算指令程序控制指令(转移指令、转子程序指令和返回指令)、输入 / 输出类指令

指令格式

指令字长

  • 指令字:代表指令的一组二进制代码信息
  • 指令字长:指令字中二进制代码的位数
    一台机器的指令系统可以采用位数不相同的指令,即指令字长是可变的

指令的基本格式

在这里插入图片描述

  • 操作码 O P OP OP:指明该指令所要完成的操作
    (操作码字段的位数决定了支持的指令数)
  • 地址码 A A A:说明操作数存放的地址,有时则就是操作数本身

定长操作码指令格式

  • 各指令 O P OP OP 的位置、位数固定相同

  • 优点:有利于简化硬件设计,减少译码时间
  • 应用:在字长较长的大中型、超级小型机以及 RISC 上使用

扩展操作码指令格式

  • 各指令 O P OP OP 的位置、位数不固定,根据需要变化
  • 不同地址数的指令可以具有不同长度的燥作码,从而在满足需要的前提下,有效地缩短指令字长

设汁操作码不固定的指令系统时,应尽量考虑安排指令使用频度高的指令占用短的操作码,这样可以缩短经常使用的指令的译码时间


  • 特点:在不增加指令字长度的情况下可表示更多的指令,但增加了译码和分析难度,需更多硬件支持
  • 应用:微机中常使用此方式

实现的关键在于 设置扩展标志


指令字长16位,可含有3、2、1或0个地址,每个地址占4位

在这里插入图片描述

各指令的操作码一定不能重复,因此如果要扩展,就得至少留一个状态进行扩展!

地址码的表示与编码

  • 地址码用来指出该指令的 源操作数的地址 以及 结果的地址
  • 这里的 “地址”, 可以是
    • 主存的地址
    • 寄存器的地址 (寄存器编号)
      使用寄存器比使用主存速度更快,且需要的寻址范围小得多 (寄存器个数很少)
    • I/O 设备的地址

指令提供地址的方式

  • 显地址方式:指令中明显指明地址
  • 隐地址方式:地址隐含约定,不出现在指令中(例如某种格式的地址就代表内存中的地址)。使用隐地址可以减少指令中的地址数,简化地址结构

  • 零地址指令(例:空操作NOP

在这里插入图片描述

  • 一地址指令(例:递增,移位,取反,INC AXNOT BX

在这里插入图片描述

  • 二地址指令(例:[A1]+[A2]→[A1][A2]为源地址,[A1]为目的地址)

在这里插入图片描述

  • 三地址指令(例:[A1]+[A2]→[A3],其中[A1][A2]为源地址,[A3]为目的地址)

在这里插入图片描述

  • 多地址指令:用于实现成批数据处理

可以看出,在指令字长相同的情况下,地址数越少,地址码的位数就越多,寻址范围越大



指令字长16位,用可变格式操作码分别形成三地址指令、二地址指令、一地址指令和零地址指令15、 14、31、16条。结果之一如下:

在这里插入图片描述

寻址方式

指令寻址

指令寻址:确定下一条将要执行的指令的地址

  • 顺序寻址:可以通过程序计数器 P C PC PC加 1 自动形成下一条指令的地址
  • 跳跃寻址:通过转移类指令实现

数据寻址

数据寻址:确定本条指令的操作数 / 操作数地址

  • 形式地址 A A A :指令中地址码给出的地址
  • 有效地址 E A EA EA :形式地址经过某种运算而得到的能直接访问主存中操作数的地址,是寻址方式和形式地址共同来决定

  • 数据寻址方式种类较多,可以通过操作码隐含说明不同寻址方式,也可以在指令宇中必须设一字段来指明属于哪一种寻址方式

在这里插入图片描述

立即寻址

  • 立即寻址:指令直接给出操作数

在这里插入图片描述


  • 提高了指令执行速度,但操作数长度受限
  • 主要用来给通用寄存器或存储单元提供常数或设置初值

直接寻址

  • 直接寻址:指令字中的形式地址 A A A 就是操作数的真实地址 E A EA EA

在这里插入图片描述


  • 寻找操作数比较简单,也不需要专门计算操作数的地址,在指令执行阶段对主存只访问一次
  • 它的缺点在于 A A A 的位数限制了操作数的寻址范围

隐含寻址

  • 隐含寻址:指令字中不明显地给出操作数的地址,其地址隐含在操作码或某个寄存器中

在这里插入图片描述


  • 有利于缩短指令字长

寄存器寻址

  • 寄存器寻址:给出操作数所在的寄存器编号

在这里插入图片描述


  • 由于操作数不在主存中,故寄存器寻址在指令执行阶段无须访存减少了执行时间
  • 由于地址字段只需指明寄存器编号(计算机中寄存器数有限),故指令字较短,节省了存储空间

间接寻址

  • 间接寻址:指令给出操作数的间接地址 (操作数有效地址所在的存储单元地址),即 E A = ( A ) EA=(A) EA=(A)
存储器间接寻址

在这里插入图片描述


  • 与直接寻址相比,扩大了操作数的寻址范围,因为 A A A 的位数通常小于指令字长,而存储字长可与指令字长相等
  • 缺点在于指令的执行阶段需耍访存两次( 一次间接寻址)或多次(多次间接寻址),致使指令执行时间延长
寄存器间接寻址
  • 寄存器间接寻址:指令字中给出寄存器的编号,该寄存器中存储的是操作数的地址

在这里插入图片描述


  • 它比存储器间接寻址少访存一次

基址寻址

  • 基址寻址:指令给出一个寄存器号 (基址寄存器) 和一个地址量,寄存器内容与地址量之和为有效地址
    E A = A + ( B R ) EA=A+(BR) EA=A+(BR)
    在这里插入图片描述

  • 基址寄存器的位数可以大于形式地址 A A A 的位数,因此基址寻址可以扩大操作数的寻址范围
  • 例如,将主存空间分为若干段,每段首地址存于基址寄存器中,段内的位移量由指令字中形式地址 A A A 指出,这样操作数的有效地址就等于基址寄存器内容与段内位移量之和,只要对基址寄存器的内容作修改,便可访问主存的任一单元
  • 基址寻址在程序重定位中极为有用。用户可不必考虑自己的程序存于主存的哪一区域,完全可由操作系统或管理程序根据主存的使用状况,赋予基址寄存器内一个初始值(即基地址),便可将用户程序的逻辑地址转化为主存的物理地址(实际地址)

变址寻址

  • 变址寻址:指令给出一个寄存器号 (变址寄存器) 和一个变址偏移量,寄存器内容与偏移量之和为有效地址
    E A = A + ( I X ) EA=A+(IX) EA=A+(IX)

在这里插入图片描述


  • 变址寻址与基址寻址的有效地址形成过程极为相似。但两者的应用场合不同
    • 基址寻址 (面向系统) 主要用于为程序或数据分配存储空间,故基址寄存器的内容通常由操作系统确定,在程序的执行过程中值是不可变的,而指令字中的 A A A 是可变的
    • 变址寻址 (面向用户) 中,变址寄存器的内容是由用户设定的,在程序执行过程中其值可变,而指令字中的 A A A 是不可变的。变址寻址主要用于处理数组问题,设定 A A A 为数组的首地址,不断改变变址寄存器的内容,便可很容易形成数组中任一数据的地址

相对寻址

  • 相对寻址:指令给出位移量, P C PC PC 的内容 (当前指令的地址) 与位移量 (补码表示,可正可负) 之和为有效地址

E A = ( P C ) + A EA=(PC)+A EA=(PC)+A

在这里插入图片描述


  • 有效地址相对 P C PC PC 上下浮动,常应用于相对转移指令
  • 为实现程序浮动提供了较好支持


某机器字长 16 16 16 位,主存按字节编码,转移指令采用相对寻址,由两个字节组成,第一字节为操作码字段,第二字节为相对位移量字段。假定取指令时,每取一个字节 P C PC PC 自动加 1 1 1。某转移指令所在主存地址为 2000 H 2000H 2000H

  1. 若相对位移量字段的内容为 06 H 06H 06H,求该转移指令成功转移后的目标地址
  2. 若相对位移量字段的内容为 F C H FCH FCH,求该转移指令成功转移后的目标地址

  1. 取出该指令后, 源 地 址 = P C + 2 = 2002 H 源地址=PC+2=2002H =PC+2=2002H,相对位移量 A = 06 H A=06H A=06H 目 标 地 址 = 源 地 址 + A = 2002 H + 0006 H = 2008 H 目标地址=源地址+A=2002H+0006H=2008H =+A=2002H+0006H=2008H
  2. 取出该指令后, 源 地 址 = P C + 2 = 2002 H 源地址=PC+2=2002H =PC+2=2002H,相对位移量 A = F F F C H A=FFFCH A=FFFCH (补码,进行符号扩展), 目 标 地 址 = 源 地 址 + A = 2002 H + F F F C H = 1 F F E H 目标地址=源地址+A=2002H+FFFCH=1FFEH =+A=2002H+FFFCH=1FFEH


设相对寻址的转移指令占3个字节,第一字节为操作数,第二、三字节为相对位移量,而且数据在存储器中采用以低字节地址为字地址的存放方式。每当CPU从存储器取出一个字节时,即自动完成 ( P C ) + 1 → P C (PC)+ 1 \rightarrow PC (PC)+1PC

  1. P C PC PC 当前值,240 (十进制),要求转移到 290 (十进制),则转移指令的第二、三字节的机器代码是什么?
  2. P C PC PC 当前值,240 (十进制),要求转移到 200 (十进制),则转移指令的第二、三字节的机器代码是什么?

  1. P C PC PC 当前值为 240, 该指令取出后 P C PC PC 值为 243, 要求转移到 290, 即相对位移量为 290 − 243 = 47 290 -243 =47 290243=47, 转换成补码 2 F H 2FH 2FH。由于数据在存储器中采用以低字节地址为字地址的存放方式,故该转移指令的第二字节为 2 F H 2FH 2FH,第三字节为 00 H 00H 00H
  2. 同理,该转移指令的第二字节为 D 5 H D5H D5H, 第三字节为 F F H FFH FFH


某计算机字长为16位,主存地址空间大小为128KB,按字编址,采用字长指令格式,指令名字段定义如下:

在这里插入图片描述
转移指令采用相对寻址方式,相对偏移是用补码表示,寻址方式定义如下:

在这里插入图片描述

注:(X)表示存储地址X或寄存器X的内容

则转移指令的目标地址范围是多少?


主存按字编址为 64 K 64K 64K 转 移 目 标 地 址 = ( P C ) + ( R n ) 转移目标地址=(PC)+(Rn) =(PC)+(Rn) P C PC PC 16 16 16 位,转移指令的目标地址范围是: 0 0 0 ~ 2 16 − 1 2^{16}-1 2161 64 K 64K 64K 空间

堆栈寻址

堆栈寻址:借助堆栈指针 S P SP SP 找到操作数

在这里插入图片描述

  • 堆栈从高地址 (栈底) 向低地址 (栈顶) 扩展,即自底向上生长方式
    • 压栈: − S P -SP SP,再存数
    • 出栈:取数,再 + S P +SP +SP
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值