![](https://lar-blog.oss-cn-nanjing.aliyuncs.com/gallery/gallery/%E9%A3%8E%E5%85%89/5D4F56FB9E1CB22675B95332AE79BE23.png)
计算机组成原理-学习笔记14-指令集
二月 10, 2023
2785
计算机组成原理-学习笔记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寄存器实现
查看评论