「计组」计算机组成原理 学习笔记 西安电子科技大学
这个学期开了三门核心专业课程,这三门的实践内容都非常少,特别要吐槽一下西电的计组实验,完全是浪费时间。操作系统和计组的课程设计还放在了下个学期,我觉得这些实验内容还是和课程同步完成比较好。计组期末考试凉了,特别是对于我这种什么都记不住的人。
第一章 绪论
By: 诚夏 SincereXIA @ XD Univ.
本作品采用知识共享署名-非商业性使用 3.0 中国大陆许可协议(Creative Commons Attribution 3.0 China Mainland License)进行许可。
冯诺依曼计算机
-
硬件系统由运算器、控制器、存储器、输入设备和输出设备五大部分组成
-
采用二进制表示机器指令和数据
-
程序和数据预先存放在存储器中,存储器按地址编址
-
设计思想:
采用二进制表示各种信息以及存储程序和程序控制。存储程序的概念是将解题程序(连同必须的原始数据)预先存入存储器;程序控制是指控制器依据所存储的程序控制全机自动、协调地完成解题任务。存储程序并按地址顺序执行。存储程序和程序控制统称为存储程序控制。
CPU如何识别从主存取出来的二进制代码是指令还是数据?
从时间来说:取指令事件发生在“取指周期”;取数据事件发生在“执行周期”
从空间来说:取出的代码是指令,一定送往指令寄存器(控制器) 取出的代码是数据,一定送往数据寄存器(运算器)
摩尔定律
集成电路芯片的集成度每18个月翻一番
——至今,DRAM每18个月、微处理器每24个月集成度翻倍
计算机软件
分类:
- 系统程序:
- 各种服务性程序,如诊断程序排错程序练习程序等;
- 语言程序,如汇编程序编译程序解释程序;
- 操作系统;
- 通用程序及数据库管理系统。
- 应用程序
Amdahl 定律
$$
加速比 = \frac{改进后的系统性能}{改进前的系统性能} = \frac{改进前的系统总执行时间}{改进后的系统总执行时间}
$$
若加速比用 $S_p$ 表示, 可改进比例: $f_e$ , 部件加速比: $r_e$ 则:
$$
S_p = \frac{1}{(1-f_e)+\frac{f_e}{r_e}}
$$
例: 若计算机系统三个部件: a, b, c, 是可以改进的, 他们的部件加速比分别是 30, 30, 20. 若部件 a 和 b 在总执行时间中所占的比例分别是 30%, 30% . 若要使整个系统的加速比达到十, 则部件 c 在总执行时间中所占的比例是多少?
解: $Sp = \frac{1}{(1-0.3-0.3-f{ce})+\frac{0.3}{30}+\frac{0.3}{30}+\frac{f_{ce}}{20}} = 10$
解得: $f_{ce} = 0.337$
第二章 计算机系统中的数据表示
By: 诚夏 SincereXIA @ XD Univ.
本作品采用知识共享署名-非商业性使用 3.0 中国大陆许可协议(Creative Commons Attribution 3.0 China Mainland License)进行许可。
数值数据编码
概述
- 机器数: 数值在计算机内的二进制表示, 如 11111
- 真值: 机器数对应的真实数值, 如 11111 的真值为 15
- 机器数的分类
- 有符号数和无符号数
- 定点数和浮点数
定点数
小数点位置固定的数称为定点数
若约定小数点的位置在机器数的最低位之后,则是纯整数;若约定小数点的位置在机器数的最高位之前,则是纯小数。
-
原码表示法
符号位——0正1负;有+0和-0之分,字长8为的范围是-127到+127
-
补码表示法
正数和0 表示同原码, 负数补码为其原码右数第一个1开始,左边的都取反,右边的都不变
无正负0之分
负数$[X]_补= 2^n+X$
表示范围:
- 定点整数: $-2^{n-1}\sim2^{n-1}-1$
- 定点小数:$-1\sim1-2^{-(n-1)}$
-
反码表示法
规则: 正数反码与原码相同;负数补码符号位为1,其余与原码 各位相反有正负0之分
表示范围:
- 定点小数: $-(1-2^{-(n-1)})\sim1-2^{-(n-1)}$
- 定点整数:$-(2^{n-1}-1)\sim2^{n-1}-1$
-
移码表示法
定义: $[X]_移 = 2^{n-1}+X , -2^{n-1}<=X<2^{n-1}$
移码可以通过补码符号位取反得到
移码特点:
- 移码的符号位: 1代表正数, 0代表负数
- 移码中的 0 为 1000000
- $[X]_移$ 与 X 成线性正比关系
定点数真值与机器数对应关系图
原码 | 补码 | 反码 | 移码 |
---|---|---|---|
浮点数表示
阶符 | 阶码(纯整数) | 数符 | 尾数(纯小数) |
---|---|---|---|
使用移码表示 | 使用补码表示 |
-
规格化浮点数:
$M>=0, M=0.1......$
$M<0, M=1.0.....$
-
IEEE 浮点数表示
IEEE 754标准规定浮点数的尾数用原码(符号位加绝对值)表示。对于用原码表示的规格化的二进制浮点数,尾数有效位的第一位一定是1,而不是0,因此在IEEE 754标准中,这个默认的1也被省去
IEEE 浮点数的 阶码用偏移值为 127 的移码来表示, 即 标准移码再-1
-
单精度浮点数(32位)的组成
31 30~23 22~0 S 阶符 E 阶码 (变形移码) F 尾数(缩写尾数)(原码) 1位 8位 23位 -
规格化的真值表示:
$x=(-1)^S×(1.M)×2^{E-127} $
-
非规格化的表示:
单精度格式位模式 IEEE浮点数的值 e=0;f≠0(f中至少有一位不为零) $(-1)^s×2^{-126}×0.f$ (非规格化数) e=0;f=0(f中所有位均为零) $(-1)^s×0.0$ (有符号的零) s=0;e=255;f=0(f中所有位均为零) +INF (正无穷大) s=1;e=255;f=0(f中所有位均为零) -INF (负无穷大) e=255;f≠0(f中至少有一位不为零) NaN (非数)
-
非数值型数据
-
BCD 码
特殊的BCD码: 2421, 5211, 4311 码:
- 对 9 互补, 便于减法运算
- 相加和大于10时, 会产生进位
格雷码: 单位距离码, 编码向下一位变换时, 只有一个二进制位不同,变码速度快
BCD 编码的区位: 1111: 无符号数 1100: 正数 1101:负数
-
ASCII
七位编码
数字0~9的高三位编码为: 011, 低四位对应数字的二进制;大写字母: 100, 小写字母: 110
第三章 运算方法与运算器
By: 诚夏 SincereXIA @ XD Univ.
本作品采用知识共享署名-非商业性使用 3.0 中国大陆许可协议(Creative Commons Attribution 3.0 China Mainland License)进行许可。
运算器用于数值计算和加工处理数据
定点数加减运算
定点数加减可以用原、反、补、移码运算,只学习补码加减法。
补码加减运算
加法运算
$$
[X+Y]{补} = [X]{补}+[Y]{补}
$$
减法运算
$$
[X-Y]{补} = [X]{补}+[[Y]{补}]_{求补}
$$
规则:
- 两个加数用补码标识
- 符号位也得加
- 运算结果也是补码
溢出判断
只有同符号数相加、异符号数相减时,运算结果才有可能溢出
- 双符号位判决法
00 表示正号, 11 表示负号,若发生溢出,则符号位一定不一致 - 进位判决法
若负号位和数值位最高位均(未)发生了进位,则未溢出 - 符进判决法
运算结果的负数符号位发生了进位,则未溢出,正数符号位没有进位,则未溢出 - 前后符号位判决法
同号求和产生异号,异号求差与被减数异号则发生了溢出
一位全加器
n位加法器
- 行波进位加法器
时延大 - 先行进位加法器
先根据输入的数字,计算出每一位接受的进位,然后进位信号并行地接到加法器上,提高加法器的速度
延迟时间图:
第一位直接接受进位,因此没有T的延迟时间
BCD 码加法器
- 先用压缩的BCD码表示需要运算的数字
- 压缩的 BCD 码直接相加
- 矫正
- 低四位相加的结果大于 9,则低四位加上 0110
- 高四位相加的结果大于 9,则高四位加上 0110
移码加法器
- 先将移码直接求和差
- 结果修正——结果的符号取反
定点数乘法运算
原码一位乘法
原则
- 乘积的符号为乘数和被乘数符号位的异或
- 乘积的绝对值为被乘数的绝对值和乘数的绝对值之积
使用 D 寄存器储存临时和,使用 A 寄存器储存乘数
步骤
-
首先确定乘积的符号位
-
将DA进行拼接,每次根据 A0 ,使 D+0 或 D+被乘数
-
DA 整体右移一位,得到新的 A0
-
当 A 中不再有被乘数时,结束计算
-
符号位与临时积拼接,得到最后的结果
[X]原=0.1101,[Y]原=1.1011,求两者之积。
解 :利用被乘数与乘数的符号,求出乘积的符号为0 ⊕1 =1
原码二位乘法
二位乘法在每次右移时,移动两位,乘数的最后两位共有四种可能性,但是加3不易操作,因此,加三操作先在本位减去乘数,移位后再加一遍乘数
设X=+0.100111,Y=-0.100111,利用原码求积。
补码一位乘法
校正法
- 从补码表示的乘数最低位开始,若为1则加补码表示的被乘数[X]补。若为0则加0。
- 部分积右移一位,再看乘数的下一位,若为1则加补码表示的被乘数[X]补。若为0则加0。
- 重复②直到乘数各位(除符号位)全都做完,获得结果。
- 最后,根据乘数的符号位Y0的状态进行校正。若Y0=1,则在③的结果上加[-X]补;若Y0=0,则③的结果就是要计算的乘积。
布斯(Booth)法
-
先将两数用补码表示
-
A 寄存器中存入 补码表示的 带符号的 乘数, 多加一位 $A_{-1}$ , 初始值设为 0, 最前方的符号位使用 两位表示
-
通过观察 A 的末位 和 A-1 位的状态,判断当前的操作
A0 A-1 操作 0 0 右移一位 0 1 + [x]补 , 右移一位 1 0 +[-x]补 , 右移一位 1 1 右移一位 已知X=0.1010, Y=-0.1101。利用布斯法补码一位乘法求积。
首先将两数用补码表示: [X]补=00.1010,[Y]补=11.0011,而[-X]补=11.0110。
补码二位乘法
原理:
$$2(Y{i-1}+(Y{i-2} - Y{i-1} )= Y{i-1} + Y{i-2} - 2Y{i}$$
- 乘数与被乘数均用补码表示,连同符号位一起参加运算。
- 乘数最低位后增加一个附加位(可用A-1),初始设定为0。
- 从附加位开始,依据操作规律,一次检测相邻3位决定具体的操作,并每次乘数右移2位。
- 当乘数(包括符号位)位数为偶数n时,右移次数为n/2次,最后一次只右移1位。
已知X=-0.1101,Y=-0.1011,试利用补码二位乘法求积。
写出[X]补=1.0011,[Y]补=1.0101
为了在求解过程中不至于溢出,被乘数X拟用3个符号位,求解过程中所用到的数值表示为:
[X]补=111.0011 2[X]补=110.0110
[-X]补=000.1101 2[-X]补=001.1010
同时,在这里利用将乘数的符号位增加一位,使其变为[Y]补=11.0101。
定点数除法运算
原码除法运算
法则 :
- 除数不为0
- 定点纯小数: |被除数| < |除数|
- 商的符号是被除数和除数的符号异或
恢复余数法
- 被除数(余数)放在 (DA)寄存器
- 每次左移一位,并减去除数的绝对值
- 够减, 则上商为1
- 不够减, 则上商为 0 , 并加回减数
加减交替法
-
若够减,上商1 ,左移一次,减除数
-
若余数<0, 上商 0, 左移一次, 加除数
若X=-0.10001011,Y=0.1110 试利用原码加减交替法求商及余数。
[X]原=1.10001011,[Y]原=0.1110, 商符=1⊕0=1
最终,商为 1.1001 余数为:0.1101*2^-4
补码除法运算
-
运算规则
-
一上来,不移位,直接做一次加减法:
被除数[X]补与除数[Y]补同号,商为正,做减运算;
被除数[X]补与除数[Y]补异号,商为负,做加运算。
-
进行循环操作:
若余数[Ri]补与除数[Y]补同号,上商‘1’,左移一位,减除数;
若余数[Ri]补与除数[Y]补异号,上商‘0’,左移一位,加除数。
-
只要除不尽,末位恒置一
- 商的符号位和数值位均在运算中产生
-
若X=-0.10001011,Y=0.1110,用补码除法求X÷Y。
解:[X]补=1.01110101,[Y]补=0.1110,[-Y]补=1.0010
浮点数运算
浮点数加减运算
-
阶码来対阶
小阶对大阶,将小阶码变成大阶码。小阶码每增加1,其相应的尾数右移一位,直到增大到与大阶码相同
-
尾数相加减
使用补码的运算规则进行计算,计算时,使用双符号位
-
最后规格化
在浮点数加减运算时,右规最多1次。若发生上溢出,可认为结果为∞
两浮点数为:
$X=0.110101×2^{-010}$ $ Y=-0.101010×2^{-001}$
求两数之和及差。
解:设两浮点数阶码为4位,用补码表示。尾数用8位,均用双符号位补码表示。则两数可表示为:
﹝X﹞补=1110;00.110101
﹝Y﹞补=1111;11.010110
对阶
求阶差:﹝△E﹞补=﹝EX﹞补 +﹝-EY﹞补 ﹦1110+0001﹦1111。即X的阶码比Y的阶码小。
因此,X尾数右移一次,使两者阶码相同。这时的X为:﹝X﹞′补=1111;00.011011,采用的是0舍1入法。
- 尾数求和: 尾数求差:
00.011011 00.011011
+ 11.010110 + 00.101010
11.110001 01.000101
规格化
从相加的结果可以看到结果为一非规格化尾数。需将尾数左移2位,变为11.000100。同时,阶码减2,则阶码变为1101。
最后,得到两数相加结果为;
﹝X+Y﹞浮=1101;11.000100。
浮点乘除运算
-
阶码相加减
求乘积的阶码,即Ez=Ex+Ey。并判断积的阶码是否溢出。
-
尾数做乘除
- 规格化
第四章 存储系统
By: 诚夏 SincereXIA @ XD Univ.
本作品采用知识共享署名-非商业性使用 3.0 中国大陆许可协议(Creative Commons Attribution 3.0 China Mainland License)进行许可。
存储器
存储器分类
- 介质分类:半导体、磁表面、光学器件
- 用途:内存(主存&Cache)、控制存储器、外部存储器
- 易失性:易失、非易失
- 存取方式:随机读写、顺序存储
- 读写功能:读写、只读
性能指标
存储容量、存取时间、存储周期、存储器带宽
内存(主存储器)
-
RAM 的内部结构以及工作原理 (不要求掌握)
-
静态读写存储器 SRAM
-
引脚说明:
$ \overline{WE}$ $ \overline{OE}$ $ \overline{CS_1}$ $ CS_2$ $D_0\sim D_7$ $A0\sim A{12}$ 写允许信号 读允许信号 片选信号 片选信号 8位数据线 13位地址线 0有效 0有效 0有效 1有效 总线数据线相接 通常接低位地址线 -
SRAM 的连接
-
不拓展连接
使用与非门进行片选使能;信号为0的地址线,先接入非门,再与与非门相接
-
字拓展连接
一片SRAM芯片的字容量不足,使用此方法拓展,即拓展的最小单位为 字
连接方法:
- 低位地址线(A0~A12)直接与每一片地址线相接
- 高位地址线(A15~A13)接入 74LS138 (3-8译码器)的 C、B、A 三端,通过给定地址线状态,确定选用的输出端,输出端直接接到片选端
- 使能端接入空余高位地址线,保证译码器处于使能状态
-
位拓展连接
字长位数的扩充
连接方法:
- 低位地址线,和控制线公用,数据线单独分开连接
- 如果有高位地址线,全部接入 74138,判断 CBA 对应的有效输出端口,进行整体使能
-
80486 总线介绍:
80486 为 32位系统,32位数据需要四个存储体保存 (位拓展)
不存在 A0 A1 地址线,取代它的是 四个 体选择信号 $\overline{BE_{0\sim3}}$
使用三个控制信号,控制主存和接口的读写,110代表读存储,111代表写存储,使用译码器,转换为存储器适配的读写信号
-
-
只读存储器 ROM
分类:
- 掩膜 ROM:制出即用,成本低,数据不可改
- 一次编程 ROM
- 擦去重写 PROM:EPROM 紫外线擦除、EEPROM 电擦除
其他存储器
-
多端口存储器:同时进行多个地址的读写
-
多体交叉存储器
-
多体并行存储器:
处理器对主存的访问是多个存储器同时进行,需要更宽的数据总线宽度
-
多体交叉存储器:
顺序方式:高位选模块,低位选块内地址
某个模块进行存取时,其他模块不工作
- 优点:某一模块出现故障时,其他模块可以照常工作,通过增添模块来扩充存储器容量比较方便
- 缺点:各模块串行工作,存储器的带宽受到了限制
交叉方式:高位选块内地址,低位选模块
连续地址分布在相邻的不同模块内,同一个模块内的地址都是不连续的。
- 优点:对连续字的成块传送可实现多模块流水式并行存取,大大提高存储器的带宽。使用场合为成批数据读取。
多个存储器轮流访问
设存储器的总个数为 m
多体交叉存储器从每个存储器各读取出一个字的总时间为:
$$
t(总时间)=T(存储器的时间周期)+(m-1)\Delta t(总线时间周期)
$$
总信息量:
$$
q=总线字长*存储器个数
$$
带宽:
$$
W=\frac{q}{t}
$$
-
高速缓冲存储器
工作原理
-
设计依据:
程序执行的时间和空间的局部性原理 CPU这次访问过的数据,下次有很大的可能也是访问附近的数据。,程序运行时,直接访问这种高速小容量的存储器,提高 CPU 的程序执行速度
-
工作流程:
CPU 读主存时,便把地址同时送给Cache和主存,Cache控制逻辑依据地址判断此字是否在Cache中,若在此字立即传送给CPU,否则,则用主存读周期把此字从主存读出送到 CPU,与此同时,把含有这个字的整个数据块从主存读出送到cache中。
CPU与Cache之间的数据传送是以字为单位,主存与Cache之间的数据传送是以块为单位
Cache 地址映射
原型系统参数:主存64MB,地址线数26根;Cache 32KB,地址线数15根,块大小为4KB,地址线数12根。
1. 全相连地址映射
-
特点
- 映射方法:多对多
- 将地址分为两部分(块号和块内地址),在内存块写入Cache时,同时写入块号标记
- 优点:冲突概率小,cache利用高
- 缺点:比较器难实现,需要一个访问速度很快代价高的相联存储器,适用于小容量的Cache
-
地址变换
- 主存地址分为:主存块号、块内地址
- 将主存块号与相连存储器内所有地址比较,找到 Cache 地址,该地址与块内地址拼接,得到的就是 Cache 地址
2. 直接映射地址变换 (区块二级架构)
-
特点
- 映射方法:一对多
i= j mod m (其中cache行号为i,主存块号为j,m为cache总行数)
主存的 $0,m,2m......$映射到cache的第0行;
主存的 $1,m+1,2m+1......$ 映射到cache 的第1行;
-
地址分为三部分(区号,块号,块内地址)
-
优点:硬件简单,成本低
- 缺点:冲突概率高,适用于较大容量的Cache
-
地址变换
- 通过块号,在静态存储器中线性查找到 Cache 区号,主存区号与 Cache 区号比较
- Cache 块号 与 块内地址 拼接,得到 Cache 地址
3. 组相连地址变换 (区组块三级架构)
-
特点
-
前两者的结合(一对多映射)(组内全相连,组间直接映射)
-
Cache分组,组间采用直接映射方式,组内采用全相联的映射方式
-
地址分四部分:主存区号、组号、块号、块内地址
- 若 Cache 分组数为 U,组内容量为 V
组号:q= j mod U(主存第j块内容拷贝到 Cache 的 q 组中的某行)
若 v=1,则为直接相联映射方式;若 u=1,则为全相联映射方式
-
-
地址变换
- 主存区号和块号拼接,在相联存储器的对应组内,进行全搜索,找到 Cache 块号
- 组号, Cache 块号和块内地址拼接,得到 Cache 地址
替换算法
-
随机替换算法 (RAND)
-
先进先出算法 (FIFO)
-
近期最少使用(LRU)
被访问的行计数器置0,其他的计数器增加1,换值最大的块,符合cache的工作原理
-
最不经常使用(LFU)
被访问的行计数器增加1,需要替换时,换值小的块,并将所有快清零,不能反映近期cache的访问情况
- 最优替换算法(OPT)
主存 —— Cache 内容一致性
- 写回法
- 写 Cache 命中:只讲数据写入 Cache,当块被替换出 Cache 时,才写回主存
- 写 Cache 未命中:将主存块调入 Cache,数据写入 Cache,对主存的修改在块调出后进行
- 每个 Cache 需要配置一个修改位
- 全写法
- 写 Cache 命中:同时修改 Cache 和主存
- 写 Cache 未命中:直接向主存写入
Cache 性能分析
-
命中率
$$
命中率 = \frac{Cache 完成存取的总次数}{主存+Cache完成存取的总次数}
$$ -
平均访问周期
$$
Cache 命中率Cache访问周期+(1-Cache命中率)主存访问周期
$$ - 加速比
$$
S_p = 主存访问周期/平均访问周期
$$
虚拟存储器
基本概念
虚拟存储器只是一个容量非常大的存储器的逻辑模型,不是任何实际的物理存储器。它借助于磁盘等辅助存储器来扩大主存容量,使之为更大或更多的程序所使用。以透明的方式给用户提供了一个比实际主存空间大得多的程序地址空间。
- 与 Cache 系统的区别
- 虚拟内存未命中损失更大
- Cache缺失时主要由硬件控制进行替换操作,而虚拟存储器的替换主要由操作系统控制。
- 处理器的地址大小决定了虚拟存储器的大小,但和Cache大小无关。
- 辅存除了作为存储器层次中内存的下一级后备存储器外,还被用于文件系统,文件系统通常不是地址空间的一部分,但占据了辅存的大部分空间。
虚存的管理
-
段式虚存
段是按照程序的逻辑结构划分成的多个相对独立部分,作为独立的逻辑单位。
- 优点:易于编译、管理、修改、维护,共享。长度可变;适合模块化程序的设计;便于信息保护
- 缺点:内存分配复杂,容易造成内存碎片
地址变换
-
页式虚存
页是主存物理空间中划分出来的等长的固定区域。
- 优点:方便造页表,调度算法简单
- 缺点:不利于保护和共享;模块性查;页表很长
地址变换
-
快表和慢表
将页表中最活跃的部分放在 Cache 存储器中构成快表,这样快表的查找和管理全用硬件实现
-
段页式虚存
段页式管理采用分段和分页结合的方法。程序按模块分段,段内再分页,进入主存以页为基本信息传送单位,用段表和页表进行两级定位管理。
外部存储器
1. 磁表面存储器
-
原理
硬磁材料的剩磁状态来保存二进制信息
-
记录方式
归零制(RZ) 、不归零制(NRZ) 、见1就变不归零制(NRZ1) 、调频制(FM)、改进调频制(MFM) 、调相制(PM)
-
磁盘结构
graph LR; 记录面-->磁道 磁道-->扇区
第五章 指令系统
1. 指令系统结构层
存储模式
-
数据存储顺序
- 大端存储: 高位字节保存在内存的低地址
- 小端存储: 低位字节保存在内存的低地址
-
堆栈
堆栈是主存中被特殊定义的一块存储区域,遵循后进先出的操作规则
堆栈采用隐含寻址的方式寻址,使用三个寄存器管理堆栈:
- 堆栈指针、堆栈基址、堆栈界限
寄存器组织
典型的寄存器有:地址寄存器、数据寄存器、指令寄存器、程序寄存器、堆栈寄存器、标志寄存器
数据类型
数值型数据、非数值型数据
指令
1. 指令的组成
指令由 操作码字段 (表征指令的操作特性与功能)和 地址码字段 (指定参与操作的操作数的地址) 组成
2. 指令的格式
-
操作码设计
-
定长操作码
-
不定长操作码
-
霍夫曼编码
-
拓展操作码
等长拓展方式 非等长拓展方式 - 依据地址码数量扩展操作码
-
-
操作数地址字段的位数
操作数地址字段的位数决定了内存的规模
-
地址码的数目
- 零地址指令
只有操作码,没有操作数地址的指令格式
这种指令无需任何操作数,如空操作
NOP
停机指令HLT
或者所需的操作数是默认的,如堆栈
- 一地址指令
单操作数指令,指令中给出的地址,既是操作数的地址,又是操作结果的存储地址
或者另一个操作数由机内硬件寄存器隐含提供
-
二地址指令
- 三地址指令
3. 指令的类型
-
数据传送类
指令源和目的操作数的位置,指明要传送数据的长度,指明寻址方式
-
算数运算类
-
逻辑运算类
-
数据转换类
完成对数据格式进行转换操作
-
输入输出类
主机与外设之间的信息交换:输入输出数据、发送控制命令、了解工作状态
-
系统控制类
通常是特权指令,由操作系统或系统软件调用,用于系统资源的分配和管理、在多任务计算机系统中必须设置,某些输入输出指令也被列为特权指令
-
控制传递类
用于程序流程控制,调用、返回、中断;循环控制;转移
- 转移指令
- 无条件转移指令:JMP
- 条件转移指令:可以对设定条件进行测试,满足时转移
- 循环控制:如 x86 中的 LOOP 指令
- 控制传递:调用和返回指令、中断指令:
INT n
- 转移指令
4. 数据寻址方式
寻址方式:指令按什么方式找到所需的操作数或信息
-
寻址方式的区分方法:
- 隐式区分:由操作码确定寻址方式
- 显式区分:在指令中设置寻址方式字段
-
寻址位置:
通用寄存器、主存、堆栈、外设端口寄存器
寻址方式
-
隐含寻址
操作码决定了操作数的存放地址,指令中完全不给出地址
-
立即寻址
指令中直接给出了需要操作的数据,完全不需要寻址
-
直接寻址 :$EA=X$
操作数在主存中,地址在指令中,根据地址访问一次主存可获得操作数
-
间接寻址 :$EA=(X)$
操作数在主存中,操作数的地址在主存中,根据指令地址访问两次主存得到操作数
-
寄存器寻址:操作数在指令指定的寄存器中
-
寄存器间接寻址:操作数地址在寄存器中,操作数在主存中
-
相对寻址:$EA=(PC)+D$
程序计数器中的地址为基准地址,指令给出偏移地址 D ,用作程序跳转
-
基址寻址 :$EA=(RB)+D$
指令中给出基址寄存器寻址位 B,或者寄存器地址 RB,给出偏移地址 D(即形式地址,带符号整数补码),两者求和得出操作数的有效地址
- 基址寻址可以扩大我们的寻址范围,因为基址寄存器的位数可以大于形式地址A的位数。
- 基址寻址在多道程序中极为有用。比如在汇编当中,我们有多个段,有时我们不必关心自己的程序位于哪一个位置,我们只需要给出基址寄存器,操作系统或者管理程序就可以根据主存空间状况,为我们指定的基址寄存器赋一个初值。
-
变址寻址:$EA = (RI)+D$
自动变址功能:寻址得到操作数后,变址寄存器内容会自动修改
基址寻址中的基址寄存器的内容通常由操作系统或者管理程序决定,在程序执行过程中是不可变的,而指令字中的 D 是可变的。变址寻址中变址寄存器的值 RI 是由用户设定的,在程序执行过程中是可变的,而指令字中的 D 是不可变的。
_(:3 」∠)_