计组学习笔记
机组理论
计算机概述
计算机重要的硬件部件
冯诺依曼机的特点
1、计算机由五大部件组成:运算器、控制器、存储器、输入设备、输出设备
2、指令和数据以同等地位存于存储器,可按地址寻访
3、指令和数据用二进制表示
4、指令由操作码和地址码组成
5、存储程序
6、以运算器为中心(现在计算机以存储器为中心)
控制器功能是协调和控制计算机的各个部分的工作,确保指令按顺序执行,并与各个部件(如运算器、存储器、I/O设备)进行交互,在现代计算机中,控制器相当于CPU中的一部分,具体来说就是控制单元(Control Unit)。控制单元负责从内存中提取指令,解析指令,发出控制信号以确保指令的正确执行。
小结一下就是CPU中负责按顺序执行指令的部分。
冯诺依曼计算机一开始以运算器为中心,现在以存储器为中心
指令也是一种数据
冯诺依曼结构计算机中数据采用二进制编码表示,主要原因是
1、二进制运算规则简单;
2、制造两个稳态的物理器件比较容易
3、便于用逻辑门电路实现算术运算。
主存储器
主存储器的组成
1、存储体(核心):数据在存储体内按地址存储
2、MAR(存储地址寄存器):MAR位数反映存储单元个数
3、MDR(存储数据寄存器):MDR位数等于存储字长
相关概念
1、存储元:即存储二进制信息的基本单元,每个存储元只能存储1个二进制位,即1bit,可以类比为一个最小的存储单元。特点:最小
2、存储单元:由存储元组成,通常是能存储一段二进制代码的单位。比如一个存储单元可以存储8个二进制位,即1字节(1Byte)。因此,存储单元就是存储一定数量的bit。
3、存储字:存储单元中二进制代码的组合
4、存储字长:存储单元中二进制代码的位数
5、1字节(Byte) = 8bit,1B = 1个字节 1b = 1位进制
一个存储单元由多个存储元组成,一个存储体由若干个存储单元组成
存储单元的宽度就是存储器的长度,在同一个存储器中,每个存储单元的宽度,即存储字长是固定的。
我自己的理解:首先存储元是最小的存储单位一个存储元存储一个二进制位就是0或1
存储单元就是由多个存储元组成的一串0和1,可以人为规定有多少位,这个位数就是存储字长。
存储字说白了就是操作系统的位数,代表了计算机存储和处理数据的基本单位。比如32位的操作系统也是可以进行64位的计算的,但是要把64位的计算数据进行拆分。
存储字长就是存储单元的位数。
运算器
运算器的主要功能是进行逻辑和算术运算。
运算器的组成
- ACC(累加器)
- MQ(乘商寄存器)
- X(通用的操作数寄存器)
- ALU(算术逻辑单元)
其中前面三个是必须的寄存器,后面的ALU是运算器的核心
相关概念

首先学习一下这是什么?这三个都是不同的寄存器。
首先MQ是涉及到乘法的,加法和减法只涉及到ACC和X,其中在ACC和X中
ACC一开始存储一个原始数据,然后X是操作数寄存器,对原始数据进行操作和更改
涉及到除法的部分就是acc存被除数,X存一个除数,计算的具体步骤可以看似成比较,从acc中不断数出X的数值,
每次数到X的数之后,就对MQ的值+1,最后ACC中剩下的数就是余数了
乘法最特殊,首先乘法的两个操作数,分别由X和MQ存储,然后ACC和MQ都只能存储结果的一部分,因为对于小数来说,可能位数会变多。
ACC在大多数情况下都是存储结果的和被操作数的
X在所有情况下都是存操作数的。
控制器
控制器的组成
- CU(控制单元):分析指令,给出控制信号
- IR(指令寄存器):存放当前执行的指令
- PC(程序计数器):存放下一条指令地址,有自动加1的功能
IR中存储的是指令,PC中存储的是地址
硬件工作过程
初始指令和数据存入主存,PC指向第一条指令,从主存中取出指令放入IR中,PC自动加1,CU分析指令并发出控制信号来控制其他部件执行指令。
CPU = 运算器 + 控制器 (+ 寄存器)
计算机系统的层次结构
层次结构

相关概念

计算机直接能执行的只有机器语言
计算机的性能指标
存储器的性能指标
1、存储器的容量 = 存储单元数 X 存储字长(bit) = 存储单元数 X 存储字长(8)(Byte)
2、相关概念
n位二进制可表示2^n^ 种状态,
例如: 2位二进制可表示4种状态:00,01,10,11容量相关的题中1K = 2^10^ , 1M = 2^20^ 1G = 2^30^ ,1T = 2^40^
在与时间相关(如传输速率)题中:1K = 10^3# , 1M = 10^6^ ,1G = 10^9^ , 1T = 10^12^
CPU的性能指标
1、CLK

简单来说就是两次下信号沿之间的时间。
CPU时钟周期是计算机最小的时间单位
3、CPI :执行一条指令所需要的时钟周期数
4、IPS:每秒执行的指令条数
5、FLOPS:每秒执行的浮点运算次数
6、执行一条指令的耗时 = CPIXCPU 时钟周期
7、CPU执行时间(整个程序的耗时)
数据的表示
数制与编码
进位计数制
1、r(2,8,10,16)进制数
基数 = r每个数码位可能出现r种字符,逢r进1
基数
每个数码位所用到的不同符号的个数,r进制的基数为r
符号

权重
符号与其位置共同影响权重(例如十进制中的个、十、百)
表示符号
进制转换
1、r进制 转为 十进制
各数码位与其位权的乘积之和
2、二进制八进制转换
每3个二进制位对应1个八进制位
3、二进制和十六进制转换
4、十进制与二进制转换
5、十进制与八、十六进制转换
先将十进制转换为二进制,再转
- 十进制转二进制 小数部分
乘2取整
编码
1、BCD编码
概念:用4位二进制数来表示1位十进制中的数码
8421码

这里的重点是 8421码是用来表示十进制的
所以对于十进制 只有0-9 超过的部分要修正
为什么要+6 因为四位二进制可以表示2^4^ 也就是16个字符 但是只需要10个字符 有6个是冗余的 所以+6
ASCII码
1、7位二进制编码(通常用8位表示一个字符,最高位为0)表示128种字符
2、所有大写字母、小写字母、数字的编码都连续
3、常见的ASCII码
汉字的表示和编码
字符串
1、从低地址到搞地址逐个字符存储,采用’/0’作为结尾标志
2、对于多字节的数据(如汉字),可采用大/笑端存储模式
大端模式:将数据的最高有效字节存放在低地址单元中。
小端模式:将数据的最高有效字节存放在搞地址单元中。
校验码
概念:校验码是指能够发现或自动校正错误的数据编码,其原理是通过增加一些冗余码,来检验火纠错编码。
奇偶校验码
1、基本原理:由若干位信息位再加一位二进制位组成校验码
2、奇叫偶掩码:整个校验码(有效信息位和校验位)中“1”的个数为奇数
3、偶校验码:整个校验码(有效信息位和校验位)中“1”的个数为偶数

简单来说就是在原始数据的基础上多加一位(0或者1),然后如果是奇校验码就要保证1的个数是奇数,如果是偶校验码就要保证1的个数是偶数
定点数的表示
定点数和浮点数 定点指的是小数点的位置是固定的 浮点指的是小数点的位置是浮动的
定点整数为纯整数,约定小数点的位置在有效数值部分最低位之后。

定点小数
定点小数是纯小数(即小于1),约定小数点位置在符号位之后,有效数值部分最高位之前。
原、反、补、移码之间的转换
原码表示法
用机器数的最高位表示该数的符号(0:正;1:负),其余各位表示数的绝对值。
注:真值零的原码表示有2种:+0 = 0,000 -0 = 0,000
反码表示法
正数:反码与原码相同;
负数:原码符号位不变,数值部分全部取反(0-1;1-0)
注:真值零的反码表示有两种 [+0]反=0,000 和[-0]反 = 1,111
补码表示法
正数:补码与原码相同;
负数:源码符号位不变,数值部分全部取反(0-1;1-0),末位+1(即“取反+1”)
注:1、此方法也可以逆着用,即由补码求原码
2、真值零的补码表示只有1种,[0]补 = 0,000
移码表示法
将[X]补 的符号位取反的即得到[X]移
注:1、移码只能用来表示定点整数,(移码多用于表示浮点数的阶码)
2、真值零的移码表示只有1种,[0]移 = 1,000

小结:定点数的表示就是现有一个符号位表示正负,然后有一位小数点(根据定点整数还是定点小数,小数点的位置不同。)
原码就是这个数本身,前面的符号位0正1负,反码对于原码就是正数不变负数全部取反,补码对于原码就是正数不变,负数全部取反,然后末尾+1,移码就是在补码的基础上把符号取反。
原、反、补、移码的表示范围
定点整数的原、反、补、移码表示范围

首先去掉一位符号位,就是有n位
其中 原码和反码都有+-0 所以表数范围都是+ -(2^n^ -1)
然后补码和移码都只有+0 所以多出来一个原本-0的位置,我们拿来表示 -2^n^ 了 即负数的部分多一个数
这样就可以简单的理解了。
定点小数的原、反、补码的表示范围
首先为什么没有移码,因为移码只能表示定点整数,

首先小数肯定小于1 然后去掉以为符号位, 就是n位 能表示2^n^ 位
所以是1-2^-n^ 位
这里要注意定点小数的补码可以表示-1
浮点数的表示
浮点数的表示为: N = r^E^ X M
其中,r是浮点数阶码的底(隐含),与尾数的基数相同,通常r = 2。 E 和 M 都是有符号的定点数,E称为阶码,M称为尾数。即浮点数由阶码和尾数两部分组成,如下图所示。

注:
- 阶码是证书,阶符J~f~和阶码位数m共同反映浮点数的表示范围及小数点的实际位置。
- 数符S~f~代表浮点数的符号,尾数的位数n反映浮点数的精确度。
规格化浮点数
概念:
- 为了提高运算精度,充分利用尾数的有效位数,规定尾数的最高数位上保证是一个有效值
如果最高位i不是一个有效值 就要进行左右规
如112.5用浮点数表示

规格化浮点数
在浮点数表示中,规范化(normalization)是一个重要的概念,它指的是将数值表示成一种标准的形式。浮点数通常分为两个部分:尾数(mantissa)和指数(exponent)。规范化的目标是让尾数的最高有效位位于其表示范围内的最左侧或最右侧。
浮点数的规范化:左规与右规
- 左规规范化(Left Normalization)
在左规规范化中,浮点数的尾数部分的有效数字会尽可能靠近数值的最高位。对于二进制浮点数,这通常意味着尾数的第一位有效数字应该是 1(即“1.XXX”的形式),并且指数相应地调整。
例如:
- 假设有一个浮点数 0.001010.00101 (二进制),要进行左规规范化。
- 步骤:
- 先将该数值移动小数点,使得尾数的第一位数字是 1。
- 移动小数点三位得到 1.011.01。
- 由于小数点向右移动了三位,指数会是 -3。
- 规范化后,浮点数表示为 1.01×2−31.01×2−3。
这是一个典型的左规规范化。
2. 右规规范化(Right Normalization)
右规规范化则是与左规相反的,尾数的有效数字会尽可能靠近数值的最低位。在右规规范化中,尾数的第一位有效数字会尽量为 0(即“0.XXX”的形式),而指数同样会进行调整。
例如:
- 假设有一个浮点数 1.01001.0100 (二进制),要进行右规规范化。
- 步骤:
- 将该数值移到小数点的最右边,使得尾数的第一位数字是 0。
- 小数点右移两位,得到 0.01010.0101。
- 由于小数点向右移动了两位,指数会变成 2。
- 规范化后,浮点数表示为 0.0101×220.0101×22。
这就是右规规范化。
总结:
- 左规规范化:尾数的最高有效位为 1,且小数点移动到该位旁边。
- 右规规范化:尾数的第一位有效数字为 0,小数点被移动到最右边。
概念
浮点数规格化形式:为了提高运算精度,充分利用尾数的有效数位,规定尾数的最高数位上保证是一个有效值。
即如果用原码表示 尾数的最高位就是1,用反码表示,尾数的最高位就是0
左规:当浮点数运算的结果为非规格化时,要进行规格化处理,将尾数算数左移一位,阶码-1的方法称为左规。左规可能要进行多次。
右规:当浮点数运算的结果尾数出现溢出(双符号位为01或者10)时,将尾数算数想右移一位,阶码加1的方法称为右规,右规只需进行一次。
注:当 r = 2 时,规格化浮点数的尾数M满足 1/2 <= |M| <=1
(保证尾数最高位是有效位,因为0.5的二进制是0.1)
左规可以看成科学计数法,小数点右移一位 10的次数-1
左移和阶码-1同时进行,保证了数字的实际大小不变
小结:左规左移 阶码-1 可能多次 右规右移 阶码+1 只需一次。
尾数为原码时规格化

尾数为补码时规格化

对于正数来说可以认为补码和原码是完全相同的
负数的话因为补码要取反然后末尾加1
所以用补码表示的时候0也表示有效位

若浮点数格式中的基数一定,且尾数采用规格化表示,则浮点数的表示范围取决于阶码的位数,而精度取决于尾数的位数。
IEEE 754 标准
按照IEEE 754标准 ,常用的浮点数的格式如下图所示

IEEE 754 标准 规定常用的浮点数格式有短浮点数(单精确,float类型)、长浮点数(双精度、double型)、临时浮点数

短浮点数和长浮点数都是采用隐含尾数最高位的方法, 因此可多表示一位尾数。临时浮点数无隐含位
阶码是以移码形式存储的,对于短浮点数,偏置量为127,因此其阶码真值 = 阶码 E - 127

若浮点数格式中基数一定,且尾数采用规格化表示,则浮点数的表示范围取决于 阶码 的位数,而进度取决于 尾数的位数。
数据的运算
定点数的运算
移位运算与误差舍入处理
逻辑移位:是指移位过程中不考虑数据符号含义,包括逻辑左移、逻辑右移,通常对于无符号数或逻辑数进行移位。
方法:不管逻辑左移还是逻辑右移,对移位空出位一律补0,对于移出位,不管0 1 ,一律丢掉。

例:
移位计算与误差的舍入处理
假设我们有一个无符号8位二进制数:
1 | 原始数值: 1101 1010 (即 218) |
逻辑左移(左移一位):
逻辑左移时,所有的位向左移动,右侧补0,最左边的位被丢弃。
1 | 左移一位: 1011 0100 (即 180) |
逻辑右移(右移一位):
逻辑右移时,所有的位向右移动,左侧补0,最右边的位被丢弃。
1 | 右移一位: 0110 1101 (即 109) |
在这两个操作中,移位空出的位置补充了0,而移出的位被丢弃。
循环移位:将机器子的首位相接进行移位,其移位通路构成一个环路,不管是左移还是右移,其移出位都会自动填补到空出位中。

考试中一般是不考的 了解。
算数移位:针对带符号的移位操作,对于不同表示法的机器码,规则不同,具体如下:原码、补码、反码的移位规则。

算术移位的时候,符号位不会发生改变
假设有一个0100 1001 的原码 左移变成了 1001 0010 那也只是数据位变了 最开始的符号位还是0 还是不变
下面的位移补码规则也是只是适用于数据位 符号位是不变的
然后原码的负数只是符号位不同 所以左右移还是补0
反码因为和原码数值相反 所以左右移的时候补1
补码最特殊 右移的时候补1 左移的时候补0
误差的舍入处理
截断法:当运算结果超出机器字长时,无条件丢掉超出的位数,且保留下来的数值不做任何改变。
末尾恒置1法:在舍去结果最低位之后超出数值位的同时,将机器数末位(即LSB位)置1,(当超出部分全是0时,末位不变)

类似四舍五入
正数:舍去部分最高位为1就进位1 为0就全舍
补码负数:舍去部分最高位和其他至少有一位是1 就进1 不然就全舍去。
溢出的判断方法
概念
溢出:指运算结果超出了数的表示范围。通常,称大于机器所能表示的最大正数为上溢,称小于机器所能表示的最小负数为下溢。
采用双符号位判断溢出
双符号位法则也称模4补码。运算结果的两个符号位S~s1~ S~s2~ 相同,表示未溢出;运算结果的两个符号位S~s1~ S~s2~ 不同,表示溢出,此时最高位符号位代表真正的符号。
符号位S~s1~ S~s2~ 的各种情况如下:
- S~s1~ S~s2~ = 00:表示结果未正数,无溢出。
- S~s1~ S~s2~ = 01:表示结果正溢出。
- S~s1~ S~s2~ = 10 :表示结果为负溢出
- S~s1~ S~s2~ = 11 表示结果为负数,无溢出。
定点数加减运算
定点数的加减运算考试一般只考补码的运算
补码运算的特点如下(设机器字长为n+1):
- 参与运算的两个操作数均用补码表示。
- 按二进制运算规则运算,逢二进一
- 符号位与数值位按同样的规则一起参与运算,符号位运算产生的进位要丢掉,结果的符号位由运算得出。
- 补码渐渐运算依据下面的公式进行。当参加的数是定点小数的时候,模M = 2;当参加运算的数是定点整数时,模M = 2^n+1^
模运算规则: [A+B]~补~ = [A]~补~ +[B]~补~ (mod M) [A-B]~补~ =[A]~补~ + [-B]~补~ (mod M)
注:mod M运算是为了将溢出位丢掉。也就是说,若做加法,则两数的补码直接相加;若做减法,则将被减数与减数的机器负数相加。
原/补码的乘法运算 老师说好像不考
原补码的一位乘法
原码的一位乘法是符号位与数值位分开计算,乘积符号由两个数的符号位“异或”形成,而乘积的数值部分由两个数的绝对值相乘而得,具体方法如下:
|X|x|Y|,按|Y|的每一位从低到高计算,遇到“1”则部分积+|X|,右移一位,遇到“0”则部分积+0,右移一位,右移次数=乘积|Y|的位数
除法运算也是一样 所以我先不学了
浮点数的运算
浮点数的加减运算
浮点数运算的特点是阶码和尾数分开运算,浮点数的加减运算一律采用补码,主要分为以下几步。
- 对阶
对阶的目的是使两个操作数的小数点位置对齐,即使两个数的阶码相等,为此,先求阶差,然后以小阶向大阶看齐的原则,将阶码小的尾数右移一位(基数为2),阶加1,直到两个数的阶码相等为止。尾数右移时,舍弃掉有效位会产生误差,影响精度。 - 尾数求和
将对阶后的尾数按定点数加(减)运算规则运算。 - 规格化
以双符号位为例,当尾数大于0时,其补码规格化形式为:[S]补 = 00.1xxxx当尾数字小于0时,其补码规格化形式是11.xxxxx
可见 当尾数的最高数值与符号位不同时,即为规范化形式。
左规:当尾数出现 00.0xx…x或11.1xxxx时,需要左规,即尾数左移一位,和的阶码减1,直到尾数出现00.1xxxx或11.0xxxx
右规:当尾数求和结果溢出(如尾数为10.xxxx或01.xxxx)时,需右规,即尾数右移一位,和的阶码加1.
注:对于左规和右规,不应死记。考察尾数大小,左规一次相当于x2 右规一次相当于/2
这里对阶操作 类似 1x10^2^ 和 1x10^3^
变成 0.1x10^3^ + 1x10^3^ 就是 1.1x10^3^
舍入
在对阶和右规的过程中,可能会将尾数低位丢失,引起误差,影响精度。常见的舍入方法有”0”舍”1”入 法和恒置”1”法
“0”舍”1”入法:类似于十进制运算中的”四舍五入”法,即在尾数右移时,被移去的最高数值位为0,则社区,被移去的最高数值为为1,则在尾数的末尾+1,这样做可能会溢出,所以可能又要右规
恒置”1”法:尾数右移时,不论丢掉的最高数值位是”1”还是”0”,都使右移后的尾数末位恒置”1”。这种方法同样有使尾数变大或变小的两种可能。
溢出判断
与顶带你书加减法一样,浮点数加减运算最后一步也需判断溢出。
在浮点数规格化中已指出当尾数置和(差)出现01.xxxx或10.xxxx时,并不表示移除,只能将此数右规后,再根据阶码来判断浮点数运算结果是否溢出。
浮点数的溢出与否是由阶码的符号决定的。以双符号位补码为例,当阶码的符号位出现”01”时,即阶码大于最大阶码时,表示上溢,进入中断处理,当阶码的符号位出现“10”时,表示阶码小于最小阶码,表示下溢,按机器零处理。实际上原理还是阶码符号位不同表示溢出,
加法器与ALU
加法器
一位全加器(FA)
全加器的逻辑表达式如下:
和表达式
进位表达式:
结构
串行加法器
在串行加法器中,只有一个全加器,数据逐位串行送入加法器中进行运算。若操作位数长n位,则加法器就要分n次进行,每次产生一位和,并且串行逐位地送回寄存器。进位触发器用来寄存进位符号,以便参与下一次运算。

并行加法器

串行进位(行波进位)
把n哥全加器串接起来,就可进行两个n位数的相加,每级直接依赖于前一级的进位,即进位信号是逐级形成的。

并行进位(先行进位、同时进位)
特点是各级进位信号同时产生,各级进位信号表达式如下

注:上述所有进位的输出仅由Gi、Pi和最低进位输入C0决定,而不依赖于其低位的进位输入C~i-1~ 因此各级进位输出可以同时产生。
最重点的就是这个公式 C~1~ = G~1~ + P~1~C~0~
C~2~ = G~2~+P~2~C~1~=G~2~ + P~2~G~1~+P~2~P~1~C~0~
ALU
ALU是一种功能较强的组合逻辑电路

74181外特性示意图
74181为4位并行加法器,其4位进位是同时产生的,用4片74181芯片可以组16位ALU。其片内进位是快速的,但片间进位是逐片传递的,即组内并行(74181片内),组件串行(74181片间),如下图所示。因此,总的形成时间还是比较长的。


主存储器
存储器概述
基本概念
cache: 高速缓冲存储器 位于cpu和主存之间
存储器的分类
按在计算机中的层次分类
- 主存储器,又称主存、内存。cpu可以直接随机对其访问,其也可与高速缓冲存储器(Cache)和辅助存储器交换数据。
- 辅助存储器,又称辅存、外存,辅存的内容需要调入主存才能被cpu访问。
- 高速缓冲存储器,简称cache,位于主存与CPU之间,用来存放当前CPU经常使用的指令和数据,以便CPU能高速访问它们。
按存储介质分类:
分为磁表面存储器(磁盘、磁带)、半导体存储器和光存储器(光盘)等
按存取方式分类
随机存储器(RAM)。存储器的任何一个存储单元都可以随机存取,且存储时间与存储单元的物理位置无关,RAM又分为静态RAM(SRAM)和动态RAM(DRAM)。
只读存储器(ROM)。存储器的内容只能随机读出而不能写入,ROM与RAM的存取方式均为随机存取。信息写入之后就固定不变,即使断电也不会丢失。
串行访问存储器。包括顺序存取存储器(如磁带)和直接存取存储器(如磁盘)。
按信息的可保存信法分类
- 易失性存储器(断电后存储信息消失):RAM
- 非易失性存储器(断电后信息仍然保持):ROM、磁盘、光盘
- 破坏性读出(某个存储单元的信息被读出时,原存储信息被破坏):半导体存储器。
- 非破坏性读出(某个存储单元的信息被读出时,原存储信息不被破坏):磁盘
存储器的性能指标
存储容量=存储字数X字长(如1Kx8位)
存储字数表示存储器的地址空间大小,字长表示一次存取操作的数据量。
存储速度:数据传输率 = 数据的宽度/存储周期
存取时间(T~a~):存取时间是指从启动一次存储器操作到完成该操作所经历的时间,分为读出时间和写入时间
存取周期(T~m~):存取周期又称读写周期或访问周期。它是指存储器进行一次完整的读写操作所需的全部时间,即连续两次独立访问存储操作(读或者写操作)之间所需的最小时间间隔。
主存带宽(B~m~):主存带宽又称数据传输率,表示每秒从主存进出信息的最大数量,单位字/秒、字节/秒(B/s)或位/秒(b/s)
注:存取时间不等于存储周期,通常存储周期大于存储时间。

关键词的是连续
存储系统的层次结构
多级存储器结构

三级存储系统的层次结构及其构成

cache位于cpu和主存之间,cpu既连接的cache也连接了主存,cpu可以直接访问这两个
辅存的信息必须被调入主存才可以被cpu访问
cache-主存层解决了主存与cpu速度不匹配的关系
存储系统的层次
cache主存层速度接近于cache,容量和价格接近主存,
主存和cache之间的数据调动由硬件自动完成,对所有程序员是透明的(感受不到其存在);主存和辅存之间的数据调动是由硬件和操作系统共同完成的,对应用程序员是透明的。
cache-主存层和主存-辅存层中,上一层的内容只是下一层内容的副本。
cache里面的内容全部来自主存,主存的内容全部来自辅存,只是调用拷贝。
半导体随机存储器
SRAM芯片和DRAM芯片
SRAM的工作原理
- 存储元:存放一个二进制位的物理器件
- 存储单元:由地址码相同的多个存储元构成
- 存储体:若干个存储单元的集合称为存储体。
静态随机存储器(SRAM)的储元是用双稳态触发器(元晶体管MOS)来记忆信息的,因此即使信息被读出后,它仍保持其原状态而不需要再生(非破坏性读出)。SRAM的存取速度快,但集成度低,功耗大,价格高,一般用于高速缓冲存储器。
就是一般用于cache
说白了就是SRAM是放在cache上记录信息的,是cache上的存储器
DRAM的工作原理
动态随机存储器(DRAM)是利用存储元电路中栅极电容上的电荷来存储信息的,但其电容上的电荷一般只能维持1-2ms,因此即使电源不断电,信息也会自动消失,为此,每隔一段时间必须刷新(即将存储单元的信息读出后立马写入),通常取2ms称为刷新周期。
DRAM的工作原理
常用的刷新方式有三种
- 集中刷新:指在一个刷新周期内,利用一段固定的时间,依次对存储器的所有行进行逐一再生,在此期间停止对存储器的读写操作,称为“死时间”,又称为“死区”。优点是读写操作不受刷新工作的影响;缺点是在集中刷新期间(死区)不能访问存储器。
- 分散刷新:把对每行的刷新分散到各个工作周期中。这样,一个存储器的系统工作周期分为欸两部分:前半部分用于正常读、写或保持:后半部分用于刷新。这种刷新方式增加了系统的存取周期,如存储芯片的存取周期为0.5微秒,则系统存取周期为1微秒。优点是没有死区,缺点是加长了系统的存取周期,降低了整机的速度。
- 异步刷新:异步刷新是前两种方法的结合,它既可以缩短死时间,又能充分利用最大刷新间隔为2ms的特点。具体做法就是将刷新周期除以行数,得到两次刷新操作之间的时间间隔t,利用逻辑电路每隔时间t产生依次刷新请求。这样可以避免使CPU连续等待过长的时间,而且减少了刷新次数,从根本上提高了整机的工作效率。
刷新是透明的 刷新不依赖于外部的访问 外部有无访问都要刷新
动态RAM的刷新单位是行,由芯片内部自动生成行地址
刷新操作类似于读操作,但又有所不同,刷新时不需要选片,即整个存储器中所有芯片同时被刷新。
SRAM和DRAM的比较

存储器芯片的内部结构
所以在我非常抽象的理解中,SRAM=cache=cpu三级缓存
DRAM=RAM =内存。
如下图所示,存储芯片由存储体、I/O读写电路、地址译码和控制电路等部分组成。

中间是存储矩阵其实就是存储体
A0-A11就是地址总共12个地址 分为行地址和列地址
X译码器把A0-A5 六位二进制转化为片选信号 来选中某一个存储芯片
驱动器就是将存储芯片的信息进行读出或者写入
存储器芯片的内部结构
1、存储体(存储矩阵)。存储体是存储单元的集合,它有行选择线(X)和列选择线(Y)来选择所访问单元,存储体的相同行、列上的位同时被读出或写入。(就是说如果存储字长是8位的话 这8位是同时被写入或者读出的)
2、地址译码器。用来将地址转换为译码输出线上的高电平,以便驱动相应的读写电路(控制读写)
3、IO控制电路。用以控制被选中的单元的读出或写入,具有放大信息的作用。
4、片选控制信号。单个芯片容量太小,往往满足不了计算机对存储器容量的要求,因此需要用一定数量的芯片进行存储器的扩展。在访问某个字时,必须“选中”该存储字所在的芯片,而其他芯片不被“选中”,因此需要有片选控制信号。
5、读写控制信号。根据cpu给出的读命令或者写命令,控制被选中单元进行读或者写。
半导体随机存储器
只读存储器
- 掩模式只读存储器(MROM)
其内容在生产时写入,不可改变,优点是可靠性强,集成度高;缺点灵活性差。 - 一次可编程只读存储器(PROM)
允许用户用专门的设备写入内容,但一旦写入,内容无法改变 - 可擦除可编程只读存储器(EPROM)
可多次写入、修改其内容,但写入时间长。 - Flash存储器(U盘)
特点是即可在不加电的情况下长期保存信息,又可在线快速擦除与重写。 - 固态硬盘(SSD)
基于闪存的固态硬盘是用固态电子存储芯片陈列制成的硬盘,由控制单元和存储单元(Flash芯片)组成,优点为读写速度更快,低功耗,缺点是价格高。
主存储器与CPU的连接
连接原理
- 主存储器通过数据总线、地址总线、和控制总线与CPU连接。
- 数据总线的位数与工作频率的乘积正比于数据传输率。
- 地址总线的位数决定了可寻址的最大内存空间。
- 控制总线(读/写)指出总线周期的类型和本次输入/输出操作完成的时刻。主存储器与CPU的连接如图所示。
数据总线的位数决定了存储字长有几位
地址总线的位数决定了存储容量有多大。
cpu的连接

主存容量的拓展
位拓展法
目的:使存储芯片的数据位数与CPU的数据线数相等
方法:将多个存储芯片的地址端、片选端和读写控制端相应并联,数据端分别引出与CPU相连。

其中这个8k就是指存储单元的个数是8k个 = 8x1024
1位指存储字长是1位 可以存储一个0或者1 每个存储单元由一个存储元构成。
对于每个芯片都是和上面一样的
然后8kx8位就是 CPU要是8kx8位 存储单元的个数不变 仍然是8k 但是存储字长由1位变成了8位
注:仅采用位扩展时,各芯片连接地址线的方式相同,但连接数据线的方式不同,在某一时刻选中所有的芯片,所以片选信号CS要连接到所有芯片。
这里为什么不需要译码器 因为所有芯片被当成了一个整体 一根地址总线就行
字拓展法
目的:增加存储器中字的数量,而位数不变。
方法:将芯片的地址线、数据线、读写控制线相并联,由片选信号来区分各芯片的地址范围。

因为是16kx8位 16k = 2^14^
所以
第一片 最低地址: 0000 0000 0000 0000 最高地址 :0011 1111 1111 1111
第二片 最低地址: 0100 0000 0000 0000 最高地址:0111 1111 1111 1111
第二片 最低地址: 0100 0000 0000 0000 最高地址:0111 1111 1111 1111
第二片 最低地址: 0100 0000 0000 0000 最高地址:0111 1111 1111 1111
注:仅采用字拓展时。各芯片连接地址线的方式相同,连接数据线的方式也相同,但在某一时刻是需要选中部分芯片,所以通过片选信号CS或采用译码器设计连接到相应的芯片。
字位同时拓展法
目的:既增加存储字的数量,又怎加存储字长。

参考22年 考试一般最多就画4片或者6片 画多是没有意义的
老师只是要考察你是否理解这个概念。
注:用字位同时扩展时,各芯片链接地址线的方式相同,但数据线的连接方式不同,而且需要通过片选信号CS或采用译码器设计连接到相应的芯片。
存储芯片的地址分配和片选
概念
片选:CPU要实现对存储单元的访问,首先要选择存储芯片,即片选。
字选:接着根据地址吗在所选中的芯片中选择相应的存储单元,即字选。
注:片选信号的产生主要为译码片选法;
自选通常是由CPU送出的N条低地址线完成的。
译码片选法(n条线课连接2^n^个芯片)
译码片选法用除片内寻址外的高位地址线通过地址译码器芯片产生信号。
例如:用8片8kx8位存储芯片组成64kx8位存储器(地址线16位,数据线8位)
需要8个片选信号,即之需要3个高位地址,如A~15~A~14~A~13~=000时,选中第一个芯片,A~15~A~14~A~13~=001时,选中第二个芯片,以此类推。
片选线的连接
片选线的连接是CPU与存储芯片连接的关键。存储器由许多存储芯片叠加而成,哪一片被选中完全取决于该存储芯片的片选控制端CS是否能收到来自CPU的片选有效信号。片选有效性信号与CPU的访存控制信号MREQ(低电平有效,上面加一杠就是低电平有效的意思。如果没有就是高电平有效)有关,因为只有当CPU要求访存时,才要求选中存储芯片。若CPU访问IO,则MREQ为高,表示不要求存储器工作。
辅存与cache
磁盘存储器
磁盘设备的组成
磁盘驱动器:核心不见尾磁头组件和磁盘组件
磁盒控制器:硬盘存储器和主机的接口
存储区域:一块硬盘有若干记录面,每个记录面划分为若干磁道,每条磁道又划分为若干扇区,扇区(也称块)是磁盘读写的最小单位,即磁盘按快存取
- 磁头数: 即记录面数,表示硬盘共有多少个磁头,磁头用于读写盘面记录的信息,一个记录面对应一个磁头。
- 柱面数:表示硬盘每面盘片上有多少条磁道。在一个盘组中,不同记录面的相同编号(位置)的磁道构成了一个原著面
- 扇区数:表示每条磁道上有多少个扇区。
磁盘的性能指标
记录密度
- 道密度:沿磁盘半径方向单位长度上的磁道数。
- 位密度:磁道单位长度上能记录的二进制代码位数
- 面密度:位密度和道密度的乘积。
磁盘的容量
非格式化磁盘容量=磁盘记录面数x磁道数x磁道容量 = 磁盘记录面数 x 道密度 x 盘片有效半径 x位密度 x磁道的周长。
格式化磁盘容量 = 磁盘记录面数 x 磁道数 x 每道扇区数 x 扇区容量
注:
- 格式化指磁盘划分扇区,并增加管理位
- 格式化之后的容量变小
平均存取时间
平均存取时间 = 寻道时间 + 旋转延迟时间 + 传输时间
寻道时间:磁头移动到目的磁道的时间;
旋转延迟时间:磁头定位道读写扇区的时间
传输时间:传输数据所花费的时间
数据传输率
假设磁盘转速位r转/秒,每条磁道容量为N字节,则数据传输率位D~r~ = rN
磁盘存储器的优缺点
优点:
- 存储容量大,为价格低;
- 记录介质可重复使用
- 记录信息可长期保存而不丢失,甚至可脱机存档。
- 非破坏性读出,读出时不需再生。
缺点:存取速度慢,机械结构复杂
磁盘地址
主机想磁盘控制器发送寻址信息,磁盘地址一般如下入所示


磁盘的工作过程
硬盘的主要操作是寻址、读盘、写盘。每个操作都对应一个控制字,硬盘工作时,第一步是取控制字,第二部是执行控制字。
硬盘属于机械式部件,其读写操作是串行的,不可能在同一时刻既读又写,也不可能在同一时刻读或者写两组数据。
高速缓冲存储器
Cache-主存层次结构通常来解决CPU和主存速度不匹配的问题,而支撑该方法的根本原理是:车徐访问的局部性原理。
程序访问的局部原理:
- 时间局部性:最近的未来要用的信息,很可能是现在正在使用的信息。如:程序中的循环。
- 空间局部性:最近的未来要用的信息,很可能与现在正在使用的信息在存储空间上是邻近的。如:指令的顺序存放,数据的数组形式等。
就是因为由上面的局部性,所以我们可以把主存中 现在这段时间经常或者很可能要被i访问的信息,调用道Cache里
这样就可以提高访问速度
Cache的基本工作原理

相关概念
- 块:为了便于Cache和主存间交换信息,Cache和主存都被划分为相等的块,Cache块又被称为Cache行,每个块由若干字节组成,块的长度称为块长(Cache行长)
- 读操作:当CPU发出读请求时,若访问地址在Cache中命中,就将此地址换成Cache地址,直接对Cache进行读操作,与主存无关;若Cache不命中,则仍需访问主存,并把此字所在的块一次性地从主存中调入Cache,若此时Cache已满,则需根据某种替换算法,用这个块替换Cache中原来的某块信息。整个过程全部由硬件实现。值得注意的,CPU与Cache之间的数据交换以字位单位,而Cache与主存之间的数据交换则以Cache块为单位。
- 写操作:当CPU发出写请求时,若Cache命中,有可能遇到Cache与主存中内容不一致的问题。例如,由于CPU写Cache,把Cache某单元中的内容从X修改为Y,而主存对应单元中的内容仍然是X,没有改变。所以若Cache命中,需要按照一定写策略出力,常见的处理方法有全写法和回写法,详见本节的Cache写策略部分。
- 命中率:CPU欲访问的信息已在Cache中的比率称为Cache的命中率。设一个程序执行期间,Cache的总命中率位N~c~,访问主存的总次数位N~m~,则命中率H为:
H = N~c~/(N~c~+N~m~) - Cache贮存系统的平均访问时间:
设t~c~为民众时的Cache访问时间,t~m~为未命中时的主存访问时间,1-H表示未命中绿,则Cache主存系统的平均访问时间T~a~为:T~a~ = Ht~c~+(1-H)t~m~
根据Cache的读、写流程,实现Cache时需解决以下关键问题:
- 数查找。。如何快速判断数据是否在Cache中。
- 地址映射。主存块如何存放在Cache中,如何将主存地址转换为Cache地址。
- 替换策略。Cache满后,使用何种策略对Cache块进行替换或淘汰。
- 写入策略。如何既保证贮存快和Cache快的数据一致性,又尽量提升效率。
Cache和主存的映射方法
全相联映射及其地址变换
全相联地址映射是指主存中的每一块都可以映射道Cache中的任意块,如下图所示。这种映射方法是最灵活的,也是Cache利用利率最高的一种方式,但同时也是成本最高的一种方式。

对于主存中的任意一块,可以去Cache中的每一个位置,全都可以去
在全相联映射方式下,贮存地址被分为两个部分:高m位表示主存快地址,低b位表示块内地址。同样,Cache的地址也分为两个部分:高c位表示Cache块地址,低b位表示块内地址。通常采用目录表记录主存块之间的映射关系,并将目录表存放在一个相联存储器中。目录表中的每个存储字主要包括三个部分:主存块号、Cache块号和有效位。有效位表示目录表中主存块号和Cache块号及案例的映射关系是否有效。目录表共有2^c^个存储字,即Cache中每个块对应一个存储字。

CPU想要访问信息 会自动生成主存地址
然后在目录表中查找该地址,看一下是不是在Cache中。
如果查到了Cache块号,且有效位为1(表示有效)
所以通过Cache块号和快内地址得到了Cache地址
重点是地址由什么组成要记清楚
主存地址由高m位和低b 组成 块号和块内地址
Cache地址由高C和低b 组成 块号和块内地址
直接映射及其地址变换
直接映射指主存中的块只能映射到Cache中某个固定的块中,主存和Cache块的对应关系可用如下公式表示:
j = i mod 2^c^

在直接映射方式下,主存地址由三部分组成:区号(t位)、区内块号(c位)和块内地址(b位),其中,m=t+c。
通常用区表来保存主存块与Cache块的映射关系。区表的每个存储字主要包括两个部分;主存区号和有效位。有效位表示区表中的主存块是否已经装入Cache中。区表中共有2^c^个存储字。区表通常存在在一个小容量高速存储器中,按地址进行访问。
一整个Cache大小的叫做一个区

首先我们先用块号按地址来访问区表,
然后和主存地址中的区号对比
如果相符就访问Cache,如果不相符,就访问主存。
组相联映射及其地址变换
组相联映射 = 全相联映射+直接相联映射。
如下图所示,主存和Cache的块先进行分组,主存和Cache每组块数相同,在地址映射时,组间为直接相联映射,组内为全相联映射。

在上图中,Cache被分为2^u^组,每组2^v^块;主存中共有2^s^个区,每个区2^u^个组,即共有2^s+u^个组。主存中的每个区的第i组都只能映射到Cache中的第i组,在组内块采用全相联方式,即每个块都可以映射到Cache的第i组的任一块。
CPU发出的访存地址被分解为:区号S,组号U,组内块号V‘ 和块内地址B四个部分。
而Cache的地址可分解为:组号U,组内块号V和块内地址B三个部分。下图给出了组相联地址变换方式。
注:n路组相联是指:每组有n块。

- 先根据组号定位到表项
- 然后看区号和块号是否相符
- 然后访问Cache
- 然后看Cache的地址是哪来的
三种映射方法的对比
三种映射方式中 ,直接映射的每个主存块只能映射到Cache中的某一固定行;全相联映射可以映射到所有Cache行;N路组相联映射可以映射到N行。当Cache大小、主存块大小一定时:
- 直接映射的命中率最低,全相联映射的命中率最高
- 直接映射的判断开销最、所需时间最短,全相联映射的判断开销最大、所需时间最长
- 直接映射标记所占的额外空间开销最小,全相联映射标记所占的额外空间开销最大。
Cache中主存的替换算法
常用的替换算法有随机(RAND)算法、先进先出(FIFO)算法、近期最少使用(LRU)算法和最不经常使用(LFU)孙发,其中最常考察的是LRU算法。
随机算法:随机的确定替换的Cache块。它的实现比较简单,但未依据程序访问的局部性原理,因此可能命中率较低。
先进先出算法:选择最早调入的行进行替换。它比较容易实现,但也未依据程序访问的局部性原理,因为最早进入的主存块也可能是目前经常要用的。
近期最少使用算法(LRU):依据程序访问的局部性原理,选择近期内长久未访问过的Cache行作为替换的行,平均命中率要比FIFO的高,是堆栈类算法。
没听到说要考 所以这个规则老子先不学了
Cache写策略
因为Cache中内容未主存的副本,当对Cache内容更改时,需用写操作使Cache内容与主存内容一直,此时分两种情况:
Cache写命中
- 全写法:当CPU对Cache写命中时,必须吧数据同时写入Cache与主存中。
优点:能随时保持主存数据正确性。
缺点:增加了访问次数,降低了Cache效率。 - 回写法:当CPU对Cache写命中那时,只把数据写入到Cache,而不立即写入主存中,只有当此块被换出时才写回主存。
优点:减少了访存次数。
缺点:存在数据不一致的隐患。
Cache写不命中
- 写分配法:加载贮存的块到Cache中,然后更新此Cache块。
- 非写分配法:只写入主存,不进行调块。
注:非写分配法通常与全写法合用;写分配法通常与回写法
虚拟存储器
基本原理
虚拟存储器技术是将一部分硬磁盘空间作为主存来使用。此时程序员使用的地址为虚拟地址(逻辑地址),对应空间也被称为虚拟地址空间(逻辑地址空间);主存地址称为物理地址(实地址),对应空间称为物理地址空间(实地址空间)
虚拟存储蓄的基本思想是:在程序执行时,按照执行的顺序将程序的一部分调入主存,其他部分则保存在辅存中。当需要执行存放在辅存中的程序段时,由CPU按照某种调度算法以页、段为单位将其调入主存。


图上有一个错误,透明性 Cache对系统程序员和应用程序员都是透明的
指令系统
概述
基本概念:
- 指令系统是软件和硬件的接口,反应了计算机所具备的基本功能。
- 计算机的指令有宏指令、机器指令和微指令。宏指令是由若干条机器指令组成的软件指令,属于软件;微指令时为程序级的命令,属于硬件;机器指令(简称指令)介于微指令和宏指令之间。
这一节要讲的就是机器指令
指令系统的发展
根据指令系统来分类计算机,主要有两类:复杂指令系统计算机(CISC)和精简指令系统计算机(RISC)
CISC举例:IA-32
RISC举例:MIPS 32
32指的是一条指令的字长或者一条指令的长度是32位
CSIC的主要特点
- 软件硬化:由于CPU访问主存的速度明星低于访问寄存器的速度,为了减少读取指令引起的大量主存访问。用一条功能复杂的新指令来取代原先需一串指令完成的功能。
- 支持高级语言:当使用高级语言取代汇编语言后,增加新的复杂指令以及复杂的寻址方式来支持高级语言程序的高效实现。
- 系统软件要求向上兼容和向后兼容,使得指令系统不断扩大。
- 指令系统庞大,指令功能复杂,指令格式和寻址方式多样性,导致编译程序复杂,程序编译速度慢,特别是难以用优化编译技术生成高效的目标代码程序
- 大多数指令功能复杂,且各种指令都可访问存储器,使得绝大多数指令需要多个机器周期才能完成。
- 为了实现复杂的指令系统,通常采用微程序控制技术设计控制器,由微程序解释执行机器指令,也影响了指令的执行速度。
- 有80%的指令只在20%的CPU运行时间内才被用到
RISC的主要特点
RISC的主要思想是只包含使用频率高的少量指令,并提供一些必要的指令以支持高级语言。
- 优先选取使用频率较高的简单指令,避免复杂指令
- 指令长度固定,指令格式种类少,寻址方式种类少。指令各字段的划分比较一致,各字段的功能也比较规整。
- 只有取数/存数指令(LOAD/STORE)访问存储器,数据在寄存器和存储器之间传送。其余指令的操作都在寄存器之间进行。
- CPU中通用寄存器数量相当多,算术逻辑运算指令的操作数都在通用寄存器中存取。
- CPU采用流水线结构,大部分指令可以在一个机器周期(时钟周期)内完成。
- 控制单元设计以硬布线控制逻辑为主,不用或少用微程序控制。
- 采用编译优化技术,以减少程序执行时间。
RISC以硬布线逻辑为主,不用或者少用微程序控制。
指令系统的功能
数据传送指令
功能:在寄存器、主存单元之间传送数据
举例:存储器读(LOAD)、存储器写(STORE)
数据运算指令
- 算术运算指令:加减乘除等。
- 逻辑运算指令:与或非等。
- 移位指令:算术移位、逻辑移位、循环移位
- 位操作指令:位清除、位求反等。
注:CISC指令系统支持源操作或者目的操作数在内存单元的运算类指令。
RISC指令系统只有存数(LOAD)和取数(STORE)可以访问内存单元,运算类指令操作数均在寄存器中。
程序控制指令
- 无条件转移:不受任何条件约束,可直接吧程序转移到某一条需要执行的指令。
- 条件转移:根据当前指令的执行结果判断是否转移。
条件满足(如零标志位(Z),结果为0,Z = 1)则转移
条件不满足,则继续顺序执行 - 调用与返回。即调用子程序指令(CALL)和返回原程序断点指令(RETURN)。
注:调用字程序时返回地址可存放在:
a. 寄存器内:机器内设有主用寄存器,专门用来放返回地址。
b.子程序的入口单元内:将返回地址存入子程序的第一个单元,然后转到第二个单元开始执行子程序
特点:此方法支持子程序嵌套,但无法支持子程序的递归调用(即子程序调用他本身)
c.堆栈栈顶:调用子程序时(CALL) 将返回地址压入堆栈,子程序返回时(RETURN),可自动从栈顶取出相应的返回地址。
特点:此方法可实现递归调用。
指令格式
指令的基本格式如下:
- 操作码:指出指令的操作性质,即指令完成的功能
- 地址吗:指出操作数的地址,即操作对象所在位置,在主存储中的地址
分别是做什么操作和对什么对象操作
指令分类
按指令中地址码字段的个数分类:三地址指令,二地址指令,一地址指令。
三地址指令,指令格式:
A1 A2 为源操作数地址,A3为目的操作数地址
就是A1 A2 进行某种操作 然后将结果赋值给A3
特点:执行指令后,两个源操作数的内容不变:指令字长较长,难以支撑SS型指令。
二地址指令
A1既是源操作数地址也是目的操作数地址:A2为另一个源操作数地址。
特点:二地址指令和三地址指令能完成同样的数据处理操作
二地址指令通过减少一个地址码字段,可以减少指令字长度或增加地址码字段位数或为操作码扩展提供支持。
二地址指令执行后一个源操作数内容会被替代,影响了程序的灵活性。
一地址指令
在二地址指令格式的基础上,将一个地址设定到专用寄存器中(通常为AC),便行程了一地址指令格式。

特点:一地址指令字长进一步缩短;执行该指令的前提是一个操作数已存入特定位置,入AC中
零地址指令
例如:堆栈机类,空操作(NOP),停机(HLT)等指令。
指令字长
- 等长指令字结构:指令系统中所有指令字长均相等,通常为机器字长
特点:指令的读取和分析的硬件结构简单
举例:MIPS32采用单字长的登场指令字结构,指令字长为32位。 - 变长指令字结构:各种指令长度不等,如:半字长,单字长,双字长
特点:结构灵活,能充分利用指令信息位,但指令读取控制及分析的逻辑复杂。
举例:LA-32采用变长指令字结构,指令长度取1-16倍字节
操作码扩展技术
定长操作码
指操作码的位数是固定的,比如固定四位或者固定八位
优点:硬件设计,指令译码结构简单,译码时间短。
缺点:浪费了许多信息位
举例RISC普遍为此结构,MIPS32操作码固定6位。
变长操作码
等长拓展法(保留一个码点/状态、标志)
以4-8-12拓展法为例:

这里好像也不考 所以也先不学了。
寻址方式(重点)
指令系统中采用不同寻址方式的主要目的
缩短指令长度,扩大寻址范围
提高程序灵活性。
基本概念
- 形式地址(符号地址):指令中显示给出的地址。
- 有效地址(逻辑地址):操作数活指令实际的地址。
- 有效地址(EA):由寻址方式和形式地址共同确定。
指令寻址
- 顺序寻址:不需要再指令中显示给下一条指令地址的信息,而是通过程序计数器(PC)加“1”,自动形成下一条指令的地址。
(注:次数的+1 并不是真正的+1 ,加的是指令的字长) - 跳跃寻址:由转移类指令给出吓一跳指令的地址信息(性质方式和形式地址),类似数据寻址多种寻址方式。
- 数据寻址:根据数据所在位置分为:
立即寻址:操作数直接在指令的地址码字段给出。

这个I就是操作数 在指令中直接给出
特点:形式地址I不是操作数地址,而是操作数本身
有效地址(EA)为该指令在主存单元的地址
执行阶段不必访存,执行速度快
4.寄存器寻址:源操作数以及在通用寄存器中,或者操作结果要存回寄存器中

特点:
EA=R~i~(R~i~为通用寄存器编号)
寄存器寻址方式执行过程中也无需访问,执行时间短
寄存器编号为暑校,指令字长短,节省了存储空间。
存储器寻址
数据存储在存储器中,根据有效地址的不同形成方式,分为
- 直接寻址:指令中地址码字段给出的形式地址 就是操作数或下一条的有效地址

特点:EA = A
获取有效地址比较简单
指令执行期间,需访问一次主存
指令字长限制了形式地址字段的位数,可寻址范围较小。 - 间接寻址(存储器间接寻址)
指令中的形式地址是操作数地址的地址,需访问两次或两次以上主存才能得到操作数(或指令)

特点:一次间接时,EA = A
寻址范围取决于主存字长m,一次间接寻址最大范围2^m^字
间接寻址为程序设计提供很好的灵活性,但要多次访存,执行速度较慢。
3.寄存器间接寻址:形式地址给出的是通用寄存器的编号为R

特点:EA=R~i~
寄存器间接寻址的寻址范围取决于寄存器的位数(即机器字长n)
MIPS机器受流水线结构限制,其指令系统不支持间接寻址方式。
4.偏移寻址:直接寻址和寄存器间接寻址的结合。

特点:偏移寻址方式既要给出形式地址A(偏移量),也要指出引用哪一个寄存器R~i~的内容实现便宜,即EA = R~i~+A
此外R可是专用寄存器也可是通用寄存器,A为有符号整数(通常用补码表示)
- 相对寻址
特点:使用专门的程序计数器PC,EA = PC+A ,寻址范围取决于偏移量A的位数k
只要操作数或下一条指令与当前指令的相对距离不变,无论程序放到主存中的哪一段区域都可以正确执行,既有利于程序在内存中浮动。 - 编址寻址:
特点:采用专用变址寄存器R~x~或通用寄存器R~i~
EA = R~x~+A或EA = R~i~+A
变址寻址常用于数组或字符串操作,即,寄存器中存放的是修改量
寻址完成后,寄存器的内容会自动调整。
地址范围由寄存器的位数决定 - 基址寻址
特点:EA = R~b~+A
基址寻址通常用于实现操作系统对用户的动态定位 - 段寻址:基址寻址的一种特例,用于地址长度超过其字长的场合。

堆栈寻址
存储器堆栈在主存中开辟一块区域,一端浮动称为栈底,另一端浮动称为栈顶。栈顶书数据唯一的出入口。
堆栈指针(SP)始终指向栈顶,依据先进后出的原则存储数据。栈底栈顶有两种设定方法。
- 栈底设在堆栈区域的低地址端,栈顶设在高地址端,堆栈向上生长
- 栈底设在高地址端,栈顶在低地址端,向下生长。
存储器堆栈主要有两种实现方法:
1、指向栈顶的一个空单元
当堆栈为空时,栈底和栈顶为同一单元
2、sp指向栈顶的一个非空单元
复合寻址
将两种以上寻址方式联合起来使用

寻址方式重构
上面说的很不清楚 我自己重新理了一遍

数据通路
CPU概述
CPU的功能
- 指令控制:即程序的顺序控制,包括取指令、分析指令、执行指令操作
- 操作控制:指令的执行由多个操作信号控制,这些操作信号即由CPU产生。
- 时间控制:对各种操作加以时间控制。
- 数据加工:数据的算数运算和逻辑运算。
- 中断处理:处理计算机允许时发生的异常及特殊情况
CPU的结构

运算器:计算机对数据进行加工处理的中心。
- 算术逻辑单元(ALU):运算器的核心部件,主要功能是进行算数/逻辑运算。
- 暂存寄存器:暂存从主存读来的数据,对应用程序员来说是透明的。
- 累加寄存器:是一个通用寄存器,可作为加法运算的一个输入端,也可暂存ALU运算的结果。
- 通用寄存器组:用于存放操作数和各种地址信息。
- 程序状态字寄存器(PSW):保留由算术逻辑运算指令或测试指令的结果而建立的各种状态信息,入溢出标志(OF)、符号标志(SF)、零标志(ZF)、进位标志(CF)等。
- 移位器:对操作数或运算结果进行移位运算。
- 计数器:控制乘除运算的操作步骤。
控制器:基本功能为通过一系列微操作来执行指令
- 程序计数器。用于指出下一条指令在主存中的存放地址。CPU根据PC的内容取主存中取指令。因程序中指令(通常)是顺序执行的,所以PC有自增功能。
- 指令寄存器。用于保存当前正在执行的那条指令。
- 指令译码器。仅对操作码字段进行译码,向控制器提供特定的操作信号。
- 存储器地址寄存器。用于存放要访问的主存单元的地址。
- cu能出其数据寄存器。用于存放向贮存写入的信息或从主存读出的信息。
- 时序系统。用于产生各种时许信号,它们都由统一时钟(CLOCK)分频得到。
- 微操作信号发生器。根据IR的内容(指令)、PSW的内容(状态信息)及时序信号,产生控制整个计算机系统所需的各种控制信号,其结构有组合逻辑型和存储逻辑型两种。
注:对用户透明的寄存器:MAR、MDR、IR
对用户不透明的寄存器:通用寄存器组、程序状态字寄存器
CPU从主存取指令时,总是根据程序计数器PC得到主存地址。
数据通路
指令执行过程
指令周期
- 定义:CPU从主存中去除并执行一条指令的时间
- 特点
1、指令周期通常用若干机器周期表示,一个机器周期又包括若干时钟周期(节拍或者T周期,为CPU操作的最基本单位)
2、每个指令周期内的机器周期数可以不等,每个机器周期内的节拍也可以不等。

特点:完整的指令周期包括:取址、间址、执行、中断4个周期。

取址周期:取出指令。
间址周期:取有效地址。
执行周期:取操作数。
中断周期:保护程序断点。
CPU通过4个标志触发器FE、IND、EX和INT来区分取址、间址、执行、中断周期。
指令周期的数据流
定义:即在指令执行的不同阶段,根据指令要求依次访问的数据序列。
取指周期:根据PC中的地址从主存中取出指令代码并存放于IR中。

数据流:
PC-MAR-地址总线-主存
CU发出读命令-控制总线-主存
主存-数据总线-MDR-IR
CU发出控制信号-PC内容+1
间址周期

数据流:
- IR-MAR-地址总线-主存
- CU-控制总线-主存
- 主存-数据总线-MDR
其中IR取出的是真实的数据地址
执行周期
取操作数,并根据IR中指令字的操作码通过ALU操作产生执行效果。
数据流:不同指令执行周期操作不同,无统一的数据流。
中断周期
处理中断请求。
假设程序断点存入堆栈中,并用SP指向栈顶地址,且进栈操作作为先修改栈顶指针,后存入数据,且默认为向下生长型。

数据流
- CU将SP-1 - MAR-地址总线-主存
- CU发出写命令-控制总线-主存
- PC-MDR-数据总线-主存(程序断点存入主存)
- CU(中断服务程序的入口地址)-PC
指令执行方案
单指令周期:对所有指令都选用相同的执行时间来完成。
特点:指令之间串行执行,即下一条指令只能在前一条指令执行结束后才能启动。
指令周期取决于执行时间最长的指令的执行时间,降低了整个系统的运行速度。
多指令周期:对不同类型的指令选用不同的执行步骤。
特点:指令之间的串行操作
不同指令的周期数可不同,不同指令的时钟周期数也可不同。
流水线方案:指令之间并行执行,力争在每个时钟周期完成一条指令的执行过程。
机器字长是CPU一次运算的最多位数
指令子长取决于操作码位数和操作表长度,与机器字长无必然联系
指令字长一般取字节或存储字长的整数倍,不一定等于存储字长。
数据通路的功能
数据通路的定义
数据在功能部件之间传送的路径,包括数据通路上流经的部件和中断处理逻辑等。
数据通路的功能
实现CPU内部运算器与寄存器及寄存器之间的数据交换。
说白了就是数据的流通路径
数据通路的基本结构
单总线结构
连接各部件的总线只有一条

特点:结构相对简单,但数据传输存在较多的冲突现象,性能较低
降低了操作间的并行性,导致指令周期变长
ALU的两个数据输入端要设置一个暂存器(A,B)或在ALU的一个数据输入端和输入输出端设置暂存器。
双总线结构
连接各个部件的总线有两条

特点:
提高了操作间的并行性,缩短了指令周期,但增加了硬件复杂性和成本。
ALU的两个操作数直接分别从两条总线上获得,因此输入两个输入端不需要暂存器,但输出端仍需要暂存器(ALU结果要输出到目的寄存器中)。
典型单总线结构的数据通路

寄存器之间的数据传送
寄存器之间的数据传送可通过CPU内部总线完成,在上图中,某寄存器AX的输出和输入分别由AXout和AXin控制,这里以PC寄存器为例,把PC内容送至MAR,实现传送操作的流程及控制信号为:
PC - Bus PCout有效,PC内容送总线
Bus-MAR MARin 有效 总线内容送MAR
主存与CPU之间的数据传送
主存与CPU之间的数据传送也要借助CPU内部总线完成。现以CPU从主存读取指令为例说明数据在数据通路中的传送过程。实现传送操作的流程及控制信号为:
中断周期

执行算数或逻辑运算
执行算术或逻辑操作时,由于ALU本身没有内部存储功能的 组合电路,因此如要执行加法运算,相加的两个数必须在ALU的两个输入端同时有效。上图中的暂存器即用于该目的。先将一个操作数从 CPU内部)线送入暂存器保存,的内容在 ALU 的左输入端始终有效,再将另一个操作数经总线直接送到 ALU的右输入端。这样两个操器Z中。作数都送入了ALU,运算结果暂存在暂存器Z中

指令流水线
基本概念
提高处理及并行性方法:
- 时间上的并行技术,将一个任务分解为及格不同的子阶段,每个阶段在不同的功能部件上并行执行,一边在同一时刻能够执行多个任务,从而提升系统性能,此方法称为流水线技术
- 空间上的并行性,在一个处理机内设置多个执行相同任务的功能部件,并让这些功能部件并行工作,这样的处理及出纳为超标量处理机。
指令流水的定义
将一条指令的执行过程分为若干阶段,每个阶段都由相同的功能部件完成,视其为流水段,则指令的执行过程就构成了一条指令流水线。
后面的部分 也没在老头最后的波纹里 所以我也不学了
控制器 总线 输入输出系统
控制器结构

组成:包括寄存器和译码器
时序信号产生器
控制单元CU,是控制器的核心,发出整机运行所需的全部控制信号。
控制器的功能
- 从主存中取出一条指令,并指出下一条指令在主存中的位置
- 对指令译码产生操作控制信号
- 指挥控制各个部件之间的数据流动方向
控制单元的设计主要有两种方法(它们的区别在于如何产生微操作):硬布线(组合逻辑)设计方法和微程序(存储逻辑)设计方法。
控制方法
同步控制方法
指系统有一个统一的时钟,所有的控制信号均来自统一的时钟信号。通常以最长的微操作序列和最繁琐的微操作作为表尊,采取完全统一的,具有相同时间间隔和相同数目的节拍作为机器周期来运行不同的指令。
优点: 控制电路简单
缺点:运行速度慢。
异步控制方法
异步控制方式不存在基准时标信号,各部件按自身固有的速度工作,通过应答方式进行联络。
一部控制方式的优点是运行速度快,缺点是控制电路比较复杂。
联合控制方式
联合控制方式是介于同步和异步之间的一种折中。这种方式对各种不同的指令的微操作实行大部分采用同步控制、小部分采用异步控制的办法。
微程序控制器
基本思想:
将每条机器指令编写成一个微程序,每个微程序包含若干个微指令,每条微指令对应一个或几个微操作命令。将微程序存入控制存储器中,然后用寻址一般指令的办法寻址每个微程序中的微指令。
相关概念
微操作:一条机器指令可以发呢姐陈一系列微操作,其是计算机中最基本的不可再分解的操作。
微命令:在微程序控制的计算机中,将控制部件向执行部件发出的各种控制命令称为微命令,其是构成控制序列的最小单位。
微命令分为相容性微命令和互斥性微命令。
相容性微命令:可以同时产生,共同完成某一些微操作的微命令
互斥性为微命令:不允许同时出现的微命令。
注:a.微命令和微操作是一 一对应的,微命令是微操作的控制信号,微操作是微命令的执行过程。
b. 微命令的相容性和互斥性是相对的,一个微命令可以与一些微命令相容,和另一些微命令互斥。
微指令:若干微命令的集合,存放微指令的控制存储器的单位地址称为微地址。
一条微指令通常包含两大部分:
a。操作控制字段(微操作字段):用于产生某一步操作所需的各种操作控制信号。
b. 顺序控制字段(微地址码字段):用于控制产生下一条要执行的微指令地址。

微周期:指令从控制存储器中读取一条微指令并执行微操作所需的时间
控制存储器
用于存放微程序,其在CPU内部,用ROM实现。
程序和微程序
程序是指令的有序集合,用于完成特定的功能:微程序是微指令的有序集合,一条指令的功能由一段微程序来完成。
注:通常,一条机器指令对应一个微程序。由于任何一条机器指令的取指令操作都是相同的因此可将取指令操作的微命令统一编成一个微程序,这个微程序只负责将指令从主存单元中取出并送至指令寄存器。
考点!硬布线与微程序控制器的对比

练习题
计算机性能指标
若计算机字长16位,主存地址空间大小为64KB 按字节编址,则主存寻址范围是( )。
A、64k B、64kB C、32k D、32kB
首先注意这类题按字节编址 还是按字编址
如果按字节编址,就是每8位二进制作为一个存储字长,
如果是按字编址,因为字长是16位,所以是每16位二进制作为一个存储字长
另外注意题目里问的 主存寻址的范围是一个没有单位的范围。
如果问的是空间大小或者容量就是有单位的。




