计算机组成与体系结构——指令系统
计算机组成与体系结构,第4章mooc学习
本章简单介绍了一些MIPS指令
简介
指令分类
- 冯诺依曼结构计算机:存储程序+程序控制,程序控制往下面一层看就是指令执行系列机:系统结构 指令系统基本相同(保证在一个计算机上开发出的系列软件 能够在后续新推出的计算机上也能实现 因为程序是指令的集合 保证兼容性)
兼容机:系统结构 指令系统基本相同(也是为了保证软件的兼容性)
指令集架构层其实是机器语言指令,其中一条汇编语言指令对应一条机器语言指令。一条高级语言指令对应多条机器语言指令。一条机器语言指令对应多条微指令。
三地址指令 三个地址码
第一个地址所指定的数据 OP 第二个地址所指定的数据结果存入第三个地址所指定的地址
二地址指令 二个地址码
与三地址指令流程不同 控制不同(运算结果稳定以后再写入到A1中 否则会导致运算错误)
一地址指令 一个地址码
AC是通用累加器(也就是个寄存器)
(一地址指令 地址位数最多 能访问更大的范围)
零地址指令
往往不需要对具体的数据进行操作 (地址位数相当于没有)OP是操作码
-
A1 A2到底是存储器还是寄存器??也就是说操作数来自于哪里??
SS型 慢
RR型 应用广泛
RS型 应用广泛
指令格式
- 地址码字段(数据字段)表示设置数据源,几个操作数;
寻址方式地段与地址码字段配合,获取对应操作数
寻址方式是在指令中体现出来的。单但并不是所有的指令格式都这样,一般都这样,汇编语言中的8086指令格式就不这样。
思考:
①支持9条指令没操作码字段的位数至少4位。
②寻址方法字段位数与支持的寻址方式种类有关
③地址码字段的作用及影响与其位数和寻址方式有关(下一节学习)
程序员通过机器指令操作计算机硬件的接口
指令格式不同对底层硬件设计有影响 硬件设计也影响着指定格式(下一章学习)
- 举例:
寻址方式 指令寻址
简单学习一下寻址方式
-
首先介绍指令的寻址方式 怎么去寻找到指令
获得操作数需要知道怎么去获得,也就有了寻址方式
第一条指令去哪找?操作系统由磁盘装载到主存中的时候就会填第一条指令的地址(不需要硬件工程师解决)
<1>顺序寻址
+1只是逻辑上加1
<2>跳跃寻址
看一下这个图,取出来的是100内存单元的指令,但是100号内存单元的指令是JMP指令,跳转到103号单元取指令
取出来了MOV指令
执行MOV指令 然后PC+1 -
其次介绍操作数寻址 咋去找操作数 去哪找?怎么找?
(E)符号代表访问 E有效地址的 数据
<1>立即数寻址
(操作数再指令中 指令的地址字段是数据)
但是,如果字段只有三位 那他送的这个数据最大位7 这是不足。
<2>寄存器寻址
(操作数再寄存器中 指令的地址字段是寄存器的编号字段)
这个方法限制了能访问的寄存器编号 没限制所获得的数据的大小 能访问的数据最大最小一般与计算机字长有关<3>直接寻址(操作数在主存中 指令的地址码字段给出操作数在内存的地址)
地址字段的位数限制了访问主存空间大小 跟立即数寻址差不多
<4>间接寻址
(指令的地址码字段给出的是操作数地址的地址)
(D): 获得操作数的地址 ((D))获得操作数
显然以速率换访问空间 速度慢
<5>寄存器的间接寻址**(既解决寻址范围大小受地址段字段影响 又不至于太多降低寻址速度)(对直接寻址 间接寻址的改进)
(R)访问的是寄存器中的数据 而不是主存基于[BX]内容直直接访问主存 取得操作数<6>相对寻址
E=D+(PC) PC是程序计数器PC的值 D是指令中地址字段的值PC值增量 对于16位机器而言 PC执行指令一次会+2(上一节说了)
一个例题:
<7>基址寻址(指定一个基址寄存器 与本指令地址无关)**
基址寄存器类似我们* 站在*上站得更高
访问不同数据->有效地址不同->只能改变D->只能改变指令<8>变址寻址 (指定一个变址寄存器 与本指令地址无关)
不改变指令(改变变址寄存器)就可以改变数据的有效地址
总结:
从速度慢来看
变址寻址 在循环中能使用 使用价值好
从寻址方式设计角度看
提供立即数寻址 赋初值
寄存器寻址 算术运算 寄存器之间数的传递
理解这看下面这张图:
指令格式设计
(前面学习了指令格式和指令、操作数寻址方式)
-
指令格式设计的主要内容:
地址码字段个数可能有1 2 3 或者0个
寻址方式的种类确定了 寻址方式字段位数也确定了 -
几个简单的例子帮助理解:
例子1:
思路:
60种操作,所以OP位有6位
A1 A2原操作数在2K主存范围内取操作数 所以要有11×2=22
A3在1K内保存运算结果 所以要有10位
3地址指令 应该有一个与每个地址相配套的寻址方式特征位 每个操作数都要有8种寻址方式,即3位特征位 所以要有3×3=9
例子2:
比较简单
评估一下该方案
例子2:
是关于考试会考的操作码扩展问题,需要理解这类问题
我们的得先把操作码由位数由低到到高进行编
①1111扩展标识就是说 操作码是1111的时候他是一地址指令
②一地址就需要34条,所以说我们可以假定一地址指令编码就是 1111 000000-100001
③零地址指令呢?A1从100010到111111都看作零地址指令
那么:30*2的6次方中的30指的是一地址指令赋予出来的30种指令 作为扩展状态 再乘上2的6次方就是指令总条数了
MIPS指令
精简指令集:哈哈哈我就知道是斯坦福大学研究出来的,我们还在学8086呵呵
指令系统习题
这章考试涉及题目估计就那两种,比较简单
这题很简单,理解一下寻址方式就可以了
这题还是要想一想的。
二地址指令操作码位是4位,二地址指令由K2种,那留下来了16-K2个编码给一地址指令
一地址指令操作码位是10位,可扩展位6位
零地址指令,有K0条,设一地址指令有K1条。
因此有:K0 = ((16-K2)× 26 - K1)× 26
[大括号中计算出来的可以看作零地址指令的特征位]
解出K1就可以了
这道题考察的还是对于扩展标识的理解
注意二地址指令留两个向一地址指令的扩展标识
End:
自己总结的大部分都是来自华中科技大学mooc