计算机组成原理-学习笔记14-指令集

计算机组成原理-学习笔记14-指令集

1.基础

  • 计算机执行程序,程序由指令组成,CPU执行指令
  • 指令集:CPU能执行的各种不同指令的集合

  • 指令是计算机处理的最基本单位
    • 操作码(指令执行的内容)+ 操作数(要操作的对象)
  • 可以将一条指令的执行分解为一系列步骤
    • 取指令,
    • 译码/取寄存器,
    • 执行/有效地址/完成分支,
    • 访问内存,
    • 存储结果

2.指令的格式

  • 指令的要素(一定存在,但不一定显式出现为二进制)

    • 操作码:指定将要完成的操作
    • 源操作数引用:操作会涉及一个或多个源操作数,这是操作所需的输入
    • 结果操作数引用:操作可能会产生一个结果
    • 下一指令引用:告诉处理器这条指令执行完成后到哪儿去取下一条指令
  • 指令格式

    • 大多数指令集使用不止一种指令格式( 如何避免指令的二义性?)
    • 机器指令符号表示法:
      • 操作码被缩写成助记符来表示
      • ADD:加,SUB:减,MUL:乘,DIV:除,LOAD:由存储器装入,STOR:保存到存储器…
    • 操作数也可以用符号表示
      • 用寄存器编号或内存地址替换操作数
  • 区分零指令、一指令、二指令

3.操作码

• 数据传送

• 算术运算

• 逻辑运算

• 转换

• 输入/输出

• 系统控制

• 控制转移128

image-20221201163012730

image-20230210180320248

4.操作数

类型:

  • 地址

    • 4个地址引用:2个源操作数、1个目的操作数、下一指令地址
    • 下一地址可能是隐含的
  • 数值

  • 字符

    • ascii:7
    • ebcdic:8
    • unicode:16
  • 逻辑数据

  • 1/0

大端小端:大端顺小端逆(不是完全逆,1字节为单位

5.寻址方式

  • 一些定义

    • • A: 地址字段的内容

      • R: 指向寄存器的指令地址字段内容

      • EA: 被访问位置的实际(有效)地址

      • (X): 存储器位置 X 或寄存器 X 的内容

      ​ (EA)= 操作数

  • 立即寻址

    • 方式:操作数实际值出现在指令中
    • 用法:定义和使用常数或设置变量的初始值
    • 算法:操作数 = A
    • 优点:快,除了取指令之外,获得操作数不要求另外的存储器访问
    • 缺点:数的大小受限于地址字段的长度
  • 直接寻址

    • 方式:地址字段含有操作数的有效地址
    • 用法:早期计算机常用,在当代计算机体系结构中不多见
    • 算法:EA = A
    • 优点:只要求1次存储器访问,且无需为生成地址而专门计算
    • 缺点:有限的地址空间
  • 间接寻址

    • 方式:地址字段指示一个存储器字地址, 而此地址出保存有操作数的全长度地址(指针)
    • 算法:EA = (A)
    • 优点:扩大了地址空间
    • 缺点:取操作数需要2次访问存储器
    • 解释:地址引用的数量限制可能是有益的
  • 寄存器寻址

    • EA = R
    • 优点:指令中仅需要一个较小的地址字段, 且不需要存储器访问
    • 缺点:地址空间十分有限
    • 解释:寄存器寻址只有在被有效使用的时候才有意义
  • 寄存器间接寻址

    • EA = (R)
    • 优点:扩大了地址空间,比间接寻址少1次存储器访问
    • 缺点:相对于寄存器寻址,需要多1次存储器访问

偏移寻址

  • EA = (R) + A
  • 要求指令有两个地址字段,至少其中一个是显式
  • 结合直接寻址和寄存器间接寻址能力
  • 类型
    • 相对寻址
      • EA= (PC)+ A
      • 隐含引用的寄存器是程序计数器(PC),此指令后续的下一条指令的地址加上地址字段的值产生有效地址
      • 用法: 大多数存储器访问都相对靠近正在执行的指令,相对寻址可节省指令中的地址位数;可用于转移控制指令。
      • 优点: 利用程序局部性原理,节省指令中地址的位数
    • 基址寄存器寻址
      • EA = (R) + A, B为寄存器中固定的储存器地址
      • 被引用的寄存器含有一个存储器地址,地址字段含有一个相对于那个地
        址的偏移量(通常是无符号整数表示)
      • 用法: 虚拟内存空间中的程序重定位
    • 变址寻址
      • EA = (变址寄存器 IX)+ A
      • 指令地址字段引用一个主存地址,被引用的寄存器含有对于该地址的一个正
        的偏移量
      • 用法: 为完成重复操作提供一种高效机制
  • 解释: 偏移寻址要求指令有两个地址字段,至少其中一个是显式

栈寻址

  • 方式: 栈指针保存在寄存器中,对寄存器中栈位置的访问实际上是一种寄存器间接寻址方式
  • 解释: 与栈相关的是一个指针,它的值是栈顶地址,或者当栈顶的两个元素已在CPU寄存器内,此时栈顶指针指向栈顶的第三个元素

image-20230210112440703

栈的实现

image-20230210112522435

6.指令格式设计原则

  • 指令尽量短

    • 最明显的权衡考虑是在强有力的指令清单和节省空间之间进行
    • 指令长度应该是字符长度或定点数长度的整数倍 (比如n个字节)
    • 指令长度应该等于存储器的传送长度(即数据总线宽度),或者这两个值其中之一是另一个的整数倍
  • 有足够的操作码位数

    • 变长操作码:要为操作类型不断增加预留
  • 操作码的编码必须有唯一的解释

  • 指令长度是字节的整数倍

    • 与内存按照字节寻址相对应,便于指令的读取和地址计算
  • 合理选择地址字段的个数

    • 涉及到指令长度和规整性,是空间和时间开销权衡的结果
  • 指令尽量规整

    • 简化硬件的实现
  • 位的分配

    • 用变长的操作码
    • 使用寻址位的考虑因素:寻址方式的种数、操作数的数量、寄存器组的数目(对于固定数目的寄存器, 功能上的分开将使指令只需较少的位数)、地址范围、寻址粒度(使用较大的字时, 需要的地址位更少 )
  • 变长指令

    • 定义:提供不同长度的各种指令格式
    • 优点
      • 易于提供大的操作码清单,而操作码具有不同的长度
      • 寻址方式能更灵活,指令格式能将各种寄存器和存储器引用加上寻址方式予以组合
    • 缺点
      • 增加了CPU的复杂程度(效率也会降低)

指令集设计

  • 指令集的设计是件很复杂的事情,影响计算机系统的诸多方面

    • 指令集定义了处理器应完成的多数功能,对处理器的实现有着显著的影响
    • 指令集是程序员控制处理器的方式,设计时必须考虑程序员的要求
  • 设计的基本原则

    • 完备性
    • 兼容性(兼容以前的指令系统)
    • 均匀性(对多种类型数据都能处理)
    • 可扩充性:操作码预留编码空间
  • 设计的基本问题

    • 操作指令表:应提供多少和什么样的操作,操作有多复杂
    • 数据类型:对哪几种数据类型完成操作
    • 指令格式:指令的位长度、地址数目、各个字段的大小等
    • 寄存器:能被指令访问的寄存器数目以及它们的用途
    • 寻址:寻址方式的种类以及有效地址的计算
    • 下一条指令地址的确定:通常通过PC寄存器实现
查看评论