快速了解指令系统

旧街凉风 提交于 2019-12-02 09:20:16

先来看看指令系统在计算机中的位置:
在这里插入图片描述

机器指令:

指令的格式:
指令要进行操作,所以用操作码来进行实现,那么对谁进行操作呢?由地址码来实现,为了编程方便,在指令集当中,往往有多种寻址方式。
操作码—地址码—寻址方式

指令字长(一条指令的长度)
固定字长,可变字长

指令的一般格式
操作码字段–地址码字段
操作码:指出进行什么操作
(1)长度固定
用于指令字长较长的情况,RISC
如 IBM 370 8位
(2)长度可变
操作码分散在指令集的不同字段上
(3)扩展操作码技术
在这里插入图片描述
为什么要扩展操作码呢?
用上面的图来进行讲解:如果OP,A1,A2,A3都是4位的,那么这个最多只能有16条不同类型的指令,这显然是不够的,所以我们需要对操作码进行扩展。
我们经全为1的状态作为标记,如果我们的操作为1111,就扩展一位操作码,意思就是这个时候从0000-1110只有15个3地址码。相似的,如果标志位11111111,那么说明这个时候,有11110000-11111110一共有15个2地址码。剩下的分析都是相似的。

注意:3地址指令操作码每减少一个最多可构成2的4次方的2地址指令
2地址操作码每减少一个最多可以构成2的4次方的1地址指令

在程序中经常出现的那些指令我们可以用短操作码(短的查的快呀),那些不常出现的就用常操作码来表示。

地址码:
在这里插入图片描述
A1:第一操作数地址
A2:第二操作数地址
A3:结果的地址
A4:下一条指令的地址
(A1)OP(A2)->A3
上面我们一共做了4次访存。第一次是访存操作码,第二次是访存A1,第3次访存A2,第4次访存A3.
设我们的指令字长是32位,操作码8位,那么计算可以知道地址码的位数都是6位,那么这个时候我们会发现我们的寻址范围是2的6次方=64,可见是很小的,那么我们需要想办法减少地址码的个数来提高地址码的位数,从而增加地址码的寻址范围
三地址:
如果我们用PC来代替A4,那么我们就减少了一个地址码,就将原来是6位增加到了8位,寻址范围也增加了。
二地址:
还有一种增加寻址范围的方法是,在上面的基础上,我们可以不将结果存在A3,可以直接存在A1和A2,这样就又减少了一个地址码。
一地址:
还有另外一种方法是将A1或A2保存在ACC中,并将结果保存在A1(A2)(需要进行3次访存)或ACC中(只需要进行2次访存)。
零地址:
如果我们的操作数在ACC中,那么这个时候又可以减少一个地址码了。(无地址)
访存是对于主存来说的。

指令字长:

在这里插入图片描述
操作数地址的个数是对于指令字长可变情况。
(1)指令字长 固定
指令字长=存储字长
(2)指令字长 可变
按字节的倍数变化

操作数类型和操作种类

操作数类型:(就是指令需要处理的那些数的类型)
地址 比如跳转指令中的绝对跳转时候,就是无符号整数
数字 定点数 浮点数 十进制数
字符 ASCII
逻辑数 逻辑运算

数据在存储器中的存放方式
大端:字地址为高字节地址
小端:字地址为低字节地址

a.从任意位置开始存储
优点:不浪费空间
缺点:除了访问一个字节之外,访问其他任何类型的都需要两个存储周期的时间,读写控制比较复杂。
b.从一个存储字的起始位置开始访问
在这里插入图片描述
优点;不论访问何种类型的数据,都可以在一个周期内完成,读写控制相对简单。
缺点:比较浪费空间
那么,有没有一种方法,可以减少内存的浪费,又可以保障任何类型(长度小于存储字长的那些数据)的数据都可以在一个周期内被访问出来呢?
c.边界对准方式—从地址的整数倍位置开始访问
在这里插入图片描述
数据存放的起始地址是数据长度整数倍(比如说一个双字的长度是字节的8倍,那么它的起始地址就是从地址为8的整数倍的地址开始存储)
本方法是前两总方法的折中,减少了内存的浪费。

操作类型

1.数据传送
源: 寄存器 寄存器 存储器 存储器
目的: 寄存器 存储器 寄存器 存储器
例子: MOVE STORE LOAD MOVE
MOVE MOVE
PUSH POP

2.算数逻辑运算
3.移位操作
算数移位 逻辑移位 循环移位(带进位和不带进位的)
4.转移指令
(1)无条件转移 JMP
(2)条件转移
结果为零转
结果溢出转
结果有进位转
跳过下一条指令 SKP
(3)调用和返回
(4)陷阱和陷阱指令
一般不提供给用户直接使用
在出现事故时,由CPU自动产生并执行(隐指令)
设置用户可以使用的陷阱指令
(5)输入输出

寻址方式

什么是寻址方式:
找到本条指令操作数地址
下一条要执行指令指令地址

寻址方式
指令的寻址
数据的寻址

一:指令寻址
顺序 PC=PC+1
跳跃 由转移指令指出
在这里插入图片描述
二:数据寻址
在这里插入图片描述
1.立即数寻址
形式地址A就是操作数
#号就是寻址特征,表示后面的A就是操作数
为什么执行指令不存在访存嗯呢?因为没有地址字段,不需要访问地址字段在这里插入图片描述
2.直接寻址
EA=A
意思就是,有效地址就等于形式地址
在这里插入图片描述
3.隐含寻址
操作数地址隐含在操作码中
在这里插入图片描述
4.相对寻址
EA=(PC)+A
A是相对于当前指令的位移量(可正可负,补码)
在这里插入图片描述
5.间接寻址
在这里插入图片描述
间接寻址就好像是一个盒子,打开之后还是个盒子,可能你打开很多次还是一个盒子,但是最后还是会发现打开某一个盒子的时候里面就装有东西了。

6.寄存器寻址
EA=Ri
有效地址即为寄存器编号
在这里插入图片描述
7.寄存器间接寻址
EA=(Ri)
操作数保存在内存当中,操作数的地址保存在了寄存器当中
在这里插入图片描述
操作数保存在内存当中,操作数的地址保存在了寄存器当中,所以需要进行访存
便于循环程序的编写(我们如果要修改操作数地址,只需要在寄存器中进行修改就可以了不需要在我们的指令中进行修改)

8.基址寻址
(1)在CPU用设置专用的寄存器作为基址寄存器
有效地址是基址寄存器中保存的内容+形式地址
EA=(BR)+A
BR为基址寄存器
在这里插入图片描述
可以扩大寻址范围(通过修改BR的位置,就可以扩大寻址的范围)
有利于多道程序
BR的内容由操作系统和管理程序来设定
如果要修改地址,不能修改BR的但是可以通过修改形式地址来进行修改
(2)采用通用寄存器来作为基址寄存器
在这里插入图片描述
可以由用户来指定选用哪一个通用寄存器来作为基址寄存器
基址寄存器中的内容由操作系统来设定
也就是R0在执行过程中是不能变的,但是A是可以变的

9.变址寻址
我们指定一个变址寄存器,这个寄存器中的内容加上形式地址,得到有效地址
EA=(IX)+A
IX为变址寄存器
通用寄存器也可以作为变址寄存器
在这里插入图片描述
可扩大寻址范围
IX的内容由用户给定
便于处理数组问题
在程序执行过程中IX是可以修改的,但是A是固定的。

10.堆栈寻址
在这里插入图片描述
SP的修改与主存编址方法有关
在这里插入图片描述

RISC技术

RISC指令的特征:
选用使用频率较高的一些 简单指令,复杂指令的功能由简单指令来组合
指令长度固定 指令格式种类少,寻址方式少
只有LOAD/STORE方式访存
CPU有多个通用寄存器
采用流水技术 一个时钟周期内完成一条指令
采用组合逻辑实现控制器

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!