向题看齐408之计算机组成原理概念记忆总结
Posted 生命是有光的
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了向题看齐408之计算机组成原理概念记忆总结相关的知识,希望对你有一定的参考价值。
408之计算机组成原理概念记忆总结
1、计算机系统概述
- 冯诺依曼计算机中CPU区分指令和数据的依据是?
- 从时间的角度区分:指令周期的不同阶段
- 从空间的角度区分:指令处于不同的寄存器(IR指令寄存器里面的就是指令,ACC累加器里面的就是数据)
- 冯诺伊曼计算机的特点
- 计算机由五大部件组成:运算器、存储器、控制器、I/O设备
- 指令和数据以同等地位存储在存储器中,并按地址询问
- 指令和数据均以二进制代码表示
- 指令由操作码和地址码组成,操作码用来表示操作的性质,地址码用来表示操作数在存储器中的位置
- 指令在存储器内按顺序存放,通常指定是顺序执行的(顺序寻址),在特定条件下可根据运算结果或根据设定的条件改变执行顺序(跳跃寻址)
- 早期的冯诺伊曼计算机以运算器为中心
- 单处理机,基本工作方式是控制流驱动方式,以存储程序为思想
- 软件和硬件的功能是等效的,软件和硬件在逻辑功能上是等价的
-
解释程序:逐句翻译、生成中间代码、不生成目标代码(边翻译边执行)
编译程序:生成中间代码、生成目标代码
解释和编译统称为翻译
-
MAR存放欲访问的存储单元地址、PC存放下一条指令的地址、MDR存放从存储单元取来的数据、IR存放当前执行的指令
- MAR存放存储单元地址,因此位数与地址码长度相同
- MDR存放从存储单元取来的数据,因此位数与存储字长相同
-
CPU存取速度:寄存器 > Cache > 内存
-
寄存器在CPU内部速度最快
-
Cache采用高速的SRAM制作,而内存采用DRAM制作
-
-
CPU由运算器和控制器两个部件组成,而运算器和控制器中都含有寄存器
-
相联存储器既可以按地址寻址,又可以按内容寻址,为了与传统存储器区分,又称为按内容寻址的存储器
-
在计算机多层次结构中,上下层是可以分割的,且上层是下层的功能实现,此外上层在下层的基础上实现了更加丰富的功能,仅有下层而没有上层也是可以的
-
机器字长:CPU进行一次整数运算所能处理的二进制数据的位数(通常和ALU直接相关),也叫计算机的位数,等于寄存器的位数,
存储字长:一个存储单元中二进制代码位数(通常和MDR位数相同)
指令字长:一条指令的总长度(可能会变)
数据字长:数据总线一次能并行传送信息的位数
-
用户可见的寄存器(也就是用户可以设置值):通用寄存器组、程序状态字寄存器PSW、程序计数器PC
用户不可见的寄存器:MAR、MDR、IR、暂存寄存器
-
如果计算机 按字节编址,则 每个存储单元大小为1字节,即1B,也就是8个二进制位。
如果计算机 按字编址,则 每个存储单元大小为一个字,字的长度取决于计算机字长是多少位,若题目条件说字长是16位,则一个字就是16个二进制位。也有的计算机字长是32位、64位等等。
-
小端方式:最低有效地址存放在更低地址(低存低)
-
边界对齐存储:总空间是最大类型所占空间的整数倍。
2、数据的表示和运算
2.1、进位计数制
-
任意进制 <=> 十进制:
-
任意进制 => 十进制:乘对应基数,小数点左边从基数的0次方开始
二进制 : 101.1 − > 1 × 2 2 + 0 × 2 1 + 1 × 2 0 + 1 × 2 − 1 = 5.5 八进制 : 5.4 − > 5 × 8 0 + 4 × 8 − 1 = 5.5 十进制 : 5.5 − > 5 × 1 0 0 + 5 × 1 0 − 1 = 5.5 十六进制 : 5.8 − > 5 × 1 6 0 + 8 × 1 6 − 1 = 5.5 二进制:101.1 \\quad -> 1×2^2+0×2^1+1×2^0+1×2^-1 = 5.5 \\\\ 八进制:5.4 \\quad -> 5×8^0+4×8^-1 = 5.5 \\\\ 十进制: 5.5 \\quad -> 5×10^0+5×10^-1 = 5.5 \\\\ 十六进制: 5.8 \\quad -> 5×16^0+8×16^-1 = 5.5 二进制:101.1−>1×22+0×21+1×20+1×2−1=5.5八进制:5.4−>5×80+4×8−1=5.5十进制:5.5−>5×100+5×10−1=5.5十六进制:5.8−>5×160+8×16−1=5.5 -
十进制 => 任意进制:
- 整数部分除基取余法(余数从低到高),小数部分乘基取整法(整由高到低)
- 拼凑法:最快将十进制转二进制的方法🔥
-
-
二进制 <=> 八进制
- 二进制 => 八进制:3位二进制一组,每组转换成对应的八进制符号。不足3位的补0即可
- 八进制 => 二进制:每位八进制对应3位二进制
-
二进制 <=>十六进制
- 二进制 =>十六进制:4位二进制一组,每组转换成对应的十六进制符号。不足4位的补0即可
- 十六进制 =>二进制:每位十六进制对应4位二进制
2.3、定点数的表示
正数:
- 原码 = 反码 = 补码
- 移码:在补码的基础上将符号位取反
- 由[x]补快速求[-x]补的方法:符号位、数值位全部取反,末位+1
负数:(如上图)
-
负数的反码:将原码的数值位全部取反
-
负数的补码:反码末位+1
-
移码:在补码的基础上将符号位取反
-
负数将反码转换成原码和原码转换成反码的 方式相同,都是把数值位(尾数)取反
- 快速方法🔥:符号位不动,数值位倒数第一个1及其后不变,之前全部取反
-
负数将补码转换成原码和原码转换成补码的方式相同,都是把数值位(尾数)取反,然后末位+1
-
由[x]补快速求[-x]补的方法:符号位、数值位全部取反,末位+1
2.3.1、表示范围
原码和反码的真值0有两种表示,补码和移码的真值0只有一种表示。若机器字长为n+1位,则:
整数表示范围 | 小数表示范围 | |
---|---|---|
原码和反码 | -(2n-1) ≤ x ≤ 2n-1 | -(1-2-n) ≤ x ≤ 1-2-n |
补码 | -2n ≤ x ≤ 2n-1 | -1 ≤ x ≤ 1-2-n |
移码 | -2n ≤ x ≤ 2n-1 | 移码全0真值最小,移码全1真值最大 |
补码正数比原码多表示一个 -2n,补码小数比原码多表示一个 -1
2.4、定点数的计算
2.4.1、算数移位
-
原码的算数移位:符号位保持不变,仅对数值位进行移位。
-
算数左移:低位补0,高位舍弃。
-
算数右移:高位补0,低位舍弃。
-
只对数值位移动,左移相当于×2,右移相当于÷2
-
-
反码的算数移位:
- 正数反码的算数移位和原码的算数移位相同
- 负数反码的算数移位和原码相反:
- 算数左移:低位补1,高位舍弃。
- 算数右移:高位补1,低位舍弃。
-
补码的算数移位:
-
正数补码的算数移位和原码的算数移位相同
-
负数补码中,最右边的1及其右边同原码的算数移位,最右边的1的左边同反码的算数移位:
- 算数左移(同原码):低位补0,高位舍弃
- 算数右移(同反码):高位补1,低位舍弃
-
不区分正数的另一种记忆规律:🔥
- 补码的算数右移:符号位不动,数值位右移,符号位是啥就补啥
- 补码的算数左移:符号位不动,数值位左移,通通补0
-
2.4.2、逻辑移位
可以把逻辑移位看作是对"无符号数"的算数移位
- 逻辑右移:高位补0,低位舍弃
- 逻辑左移:高位舍弃,低位补0
2.4.3、循环移位
不带进位位的循环移位:无论左移还是右移,都会将移出的数补到缺位的位置
带进位位的循环移位:
- 带进位位的循环左移:数据位连同进位位一起左移,数据的最高位进入进位位CF,而进位位则补到空缺的位置
2.4.4、加减运算
- 补码的加减运算:无论加法还是减法,最后都会转变成加法,由加法器实现运算,符号位也参与运算
2.4.5、溢出判断
仅当两个符号相同的数相加或两个符号相异的数相减才可能产生溢出,只需学习补码的溢出判断:
- 采用一位符号位
设A的符号为 AS,B的符号为BS,运算结果的符号为SS,则溢出逻辑表达式为:
V
=
A
S
B
S
S
s
‾
+
A
S
‾
B
S
‾
S
S
若
V
=
0
,
表示无溢出
若
V
=
1
,
表示有溢出
V = A_SB_S \\overline S_s+ \\overline A_S \\overline B_S S_S \\\\ 若 V = 0,表示无溢出 \\\\ 若 V = 1,表示有溢出
V=ASBSSs+ASBSSS若V=0,表示无溢出若V=1,表示有溢出
写在一起执行与运算(也就是且),加号表示或运算,上方画横线表示非运算。
-
方法二:采用一位符号位,根据数据位进位情况判断溢出
- 符号位的进位CS:符号位向更高位产生的进位数
- 最高数值位的进位C1:尾数最高位向符号位产生的进位数
- V=CS⊕C1 。若 V=0,表示无溢出,若V=1,表示有溢出(符号位的进位和最高数值位的进位相同则无溢出)
- 异或逻辑:不同为1,相同为0
-
方法三:采用双符号位:正数符号为00,负数符号为11🔥
- 运算结果的两个符号位Ss1SS2相同,表示未溢出,两个符号位不同,表示溢出,此时最高位符号位代表真正的符号
- Ss1⊕SS2 = 00,表示运算结果为正数,无溢出
- Ss1⊕SS2 = 01,表示运算结果为正溢出
- Ss1⊕SS2 = 10,表示运算结果为负溢出
- Ss1⊕SS2 = 11,表示运算结果为负数,无溢出
2.4.6、符号扩展🔥
-
定点整数的符号扩展:在原符号位和数值位中间添加新位,正数都添0,负数原码添0,反码、补码添1
-
定点小数的符号扩展:在原符号位和数值位后面添加新位,正数都添0,负数原码、补码添0,反码添1
找到最右边的1,补码这个1的左边的数值部分和反码一致,1的右边数值部分和原码保持一致
2.4.7、乘法运算(没时间不用看)
- 原码一位乘法:符号位单独处理——符号位 = xS⊕yS,数值位取绝对值进行乘法计算
- 写出[|x|]原 、[|y|]原
- 直接在x、y的原码数值位小数点前面加两个0,就是[|x|]原 、[|y|]原
- 按如上图那样写,其中第二列只需写 [|y|]原 的数值位即可,然后在末尾划条竖线,首先看竖线前的数字(运算位)
- 若运算位=1,则(ACC)+[|x|]原
- 若运算位=0,则(ACC)+0
- 每轮加法之后,ACC、MQ的内容统一逻辑右移(无符号数的算数右移)
- |y|原的数值部分占n位,则(加法、移位)看成一个操作执行n次
- 最终将竖线前的所有数抄下来,即为结果的绝对值,替换上符号位正负号(正正得正,负负得正,正负得负),得到xy=-0.10001111,这是真值,可以将其转换为原码 [xy]原 = 1.10001111
- 真值->原码:只变符号位,数值位不变
- 补码的一位乘法(Booth算法)
-
写出[|x|]补 、[|-x|]补 、[|y|]补
-
按如上图那样写,其中第二列需写 [|y|]补全部+辅助位 ,然后在辅助位前面划条竖线,用辅助位-运算位(竖线后减竖线前)
- 竖线后 - 竖线前 = 1,(ACC)+[|x|]补
- 竖线后 - 竖线前 = 0,(ACC)+0
- 竖线后 - 竖线前 = -1,(ACC)+[|-x|]补
-
每轮加法之后,ACC、MQ的内容统一算数右移(补码的算数右移)
-
|y|补的数值部分占n位,则(加法、移位)看成一个操作执行n次,但是补码乘法运算最后要多加一轮加法(也是看竖线后-竖线前的数字来决定加什么)
-
将ACC的全部+MQ的前n个位拼接,得到的即为[xy]补 = 11.01110001,前面的11即为符号位负,则xy=-0.01110001(真值)
- 原码乘法和补码乘法的对比
原码一位乘法 | 补码一位乘法 | |
---|---|---|
加法、移位次数 | n轮加法、n轮移位 | n+1轮加法、n轮移位 |
移位 | 逻辑右移 | 算数右移 |
符号位是否参与 | 符号位不参与运算 | 符号位参与运算 |
加什么 | 根据MQ的最低位(即运算位)来确定加什么 | 根据MQ的辅助位、最低位来确定加什么 |
2.4.8、除法运算(没时间不用看)
- 原码除法:恢复余数法:符号位单独处理——符号位 = xS⊕yS,数值位取绝对值进行除法计算
- 写出[|x|]原 、[|y|]原、[|y|]补 、[-|y|]补
- 按如上图那样写,[|x|]原+[-|y|]补 ,得到新余数
- 若符号位为1,则商0,并且 新余数+[|y|]补 恢复原余数,并将余数逻辑左移
- 若符号位为0,则商1,并将余数逻辑左移
- 数值位有n位,则逻辑左移n次,但是最后需要多商一次,所以商n+1次
- 原码除法:加减交替法(不恢复余数法)
- 写出[|x|]原 、[|y|]原、[|y|]补 、[-|y|]补
- 按如上图那样写,[|x|]原+[-|y|]补 ,得到新余数
- 若符号位=1,即若新余数为负,直接商0,并将 (ACC和MQ**[即新余数和商]**逻辑左移)+[|y|]补 = 余数
- 若符号位=0,即若新余数为正,直接商1,并将 (ACC和MQ**[即新余数和商]**逻辑左移)+[|-y|]补 = 余数
- 如果最后一步得到的余数是负值,则需商0并且需要再进行一次加法得到正确的余数。所以加减交替法中加减的次数可能是n+1次,也可能是n+2次,但逻辑左移只需要n次
总结:
- 在原码的加减交替法中,若余数为负,则直接商0,让余数左移一位再加上除数的绝对值的补码,得到下一个余数
- 若余数为正,则商1,让余数左移一位再减去除数的绝对值的补码,得到下一个余数
恢复余数法和加减交替法:
- 恢复余数法:当余数为负时商0并加上除数的绝对值的补码,再左移,再加上除数绝对值的负值的补码
- 加减交替法:当余数为负时商0并左移,再加上除数的绝对值的补码
- 补码的除法运算:符号位参与运算,被除数/余数、除数采用双符号位
-
写出[x]补 、[y]补 、[-y]补 注意写的并不是绝对值的补码
-
按如上图那样写,根据 x 和 y 是同号还是异号来判断:
- 若x 和 y 同号,则 [x]补 + [-y]补 = 新余数
- 若x 和 y 异号,则 [x]补 + [y]补 = 新余数
-
根据第二步得到的新余数来判断商
- 若新余数和 y 同号,则商1,并 (ACC和MQ**[即新余数和商]**逻辑左移) + [-y]补 = 新余数
- 若新余数和 y 异号,则商0,并 (ACC和MQ**[即新余数和商]**逻辑左移) + [y]补 = 新余数
- 重复n次
-
最后一步得到的新余数和y不管同号还是异号,我们都恒让商的末位置为1
-
则[x/y]补 = 商 = 1.0101
除法运算总结:
除法类型 | 符号位是否参与运算 | 加减次数 | 移位 | 商、加减原则 | 说明 |
---|---|---|---|---|---|
原码加减交替法 | 否 | n+1或者n+2 | 逻辑左移n次 | 根据余数的正负 | 若最终余数为负,需恢复余数 |
补码加减交替法 | 是 | n+1 | 逻辑左移n次 | 根据余数和除数是否同号 | 商末尾恒置1 |
2.5、浮点数的表示
浮点数由阶码和尾数两部分构成:+3.026×1011
+11+3.026
前三位表示10的次方,后面5位表示尾数。
+11
我们称为阶码,阶码由阶符和数值部分组成,阶码为正的话表示我们要将小数点后移,如果阶符为负表示我们要将小数点前移,阶码的数值部分表示小数点移动多少位+3.026
表示尾数,尾数的正负号表示数值的正负性,后面的数字称为尾数的数值部分,尾数越短,科学计数法表示的数值精度就越低
浮点数真值的确定:
N
=
r
E
×
M
阶码的真值是
E
,
尾数的真值是
M
,
r
表示几进制表示的阶码
,
二进制表示的阶码
r
=
2
N = r^E ×M \\quad 阶码的真值是E,尾数的真值是M,r表示几进制表示的阶码,二进制表示的阶码r=2
N=rE×M阶码的真值是E,尾数的真值是M,r表示几进制表示的阶码,二进制表示的阶码r=2
2.5.1、规格化
规范:小数点必须在第一位有效值的后面,尾数的最高位是有效值
-
左归:尾数算数左移一位,阶码减1
-
右归:尾数算数右移一位,阶码加1
-
用原码表示尾数最高数值位是1即可
-
用补码表示尾数的符号位和最高数值位(即符号位的后一位)一定相反
2.5.2、IEEE754浮点数标准
IEEE754标准中阶码用移码表示,尾数用原码表示。
3、存储系统
-
MDR位数 = 存储字长(数据的宽度) = 数据线的宽度, MAR位数 = 存储字数,总容量 = 存储字长 × 存储字数
-
存储周期 = 存取时间+恢复时间
-
数据传输率(主存宽带) = 存储字长(数据的宽度)/存储周期
-
一个个存储元构成存储单元(存储字),一个个存储单元构成存储体(存储矩阵) ,每一个存储元可以存储一位二进制0或1
- 一行存储元 = 一个存储单元 = 一个存储字
- 多个存储单元 = 一个存储体(存储矩阵)
-
字选线(译码器连接的地址线)的条数 = 存储单元个数 = 2MAR地址位数 ,数据线的条数 = MDR的位数,片选信1根,读写控制线1根或两根,地址线+数据线+片选线1+读写控制线1/2 = 金属引脚数
8×8位的存储芯片
:第一个8表示存储单元的数量,第二个8表示存储字长- 2n个存储单元对应n条地址线,MDR的位数(存储字长)对应数据线的根数
3.0、ROM和RAM
随机存取存储器RAM:
- 只要是RAM,都是易失性存储器(断电后信息消失)
只读存取存储器ROM:
- 只要是ROM,都是非易失性存储器(断电后信息不消失),但ROM若长期不通电,则信息也会丢失
- 光盘CDROM称为只读光盘,只能读不能写
🔥RAM和ROM都可以随机存取:存取时间与存储单元的物理位置无关
- 顺序存取存储器:磁带,顺序存储存储器的内容只能按某种顺序存取,存取时间的长短与信息在存储体上的物理位置有关,存取速度慢
- 直接存取存储器:磁盘、机械硬盘,先随机存取,再顺序存取,既有随机存取特性,也有顺序存取特性。先直接选取信息所在区域,然后按顺序方式存取。
- 读写速度:随机存取存储器 > 直接存取存储器 > 顺序存取存储器
- 上述三种存储器都是指定数据的存储地址,然后直接去那个地址当中进行读写。而下面的相联存储器是指明数据内容,根据数据内容来查找位置。前者是根据地址访问,后者是根据内容访问。
- 相联存储器:按内容指定方式和地址指定方式相结合进行寻址的存储器,一般用来制作快表TLB、相联Cache(全相联映射中用)
只读存储器ROM的分类:
- 掩膜式只读存储器MROM:存储内容由半导体制造厂按用户提出的要求在芯片的生产过程中直接写入,无法修改,灵活性差
- 一次可编程只读存储器PROM:存储内容一次性写入,无法修改,灵活性差
- 可擦除可编程只读存储器EPROM:既可读又可写,读写次数有限
- 闪存Flash存储器:U盘、固态硬盘,可读可写,但写速度比读速度慢,因为写入前要先擦除
- 固态硬盘SSD:可读可写,但写速度比读速度慢
3.1、SRAM和DRAM
动态SRAM用于主存,静态DRAM用于Cache
- DRAM芯片:使用栅极电容存储信息
- SRAM芯片:使用双稳态触发器存储信息
- 核心区别:存储元不一样
类型特点 | SRAM(静态RAM) | DRAM(动态RAM) |
---|---|---|
存储信息 | 触发器 | 电容 |
破坏性读出 | 非破坏性读出 | 破坏性读出 |
读出后需要重写(再生) | 读出后不需要重写 | 读出后需要重写 |
运行速度 | 快 | 慢 |
集成度 | 低 | 高 |
发热量 | 大 | 小 |
存储成本 | 高 | 低 |
易失/非易失存储器 | 易失存储器(断电后信息消失) | 易失存储器(断电后信息消失) |
刷新(给电容充电) | 不需要刷新 | 需要刷新 |
送行列地址 | 同时送行列地址 | 分两次送行列地址 |
用途 | 常用作高速缓存Cache | 常用作主存 |
- 刷新也就是给电容充电,刷新由CPU独立完成,不需要CPU控制,一次完整的刷新过程需要占用一个存储周期,DRAM刷新是各个芯片同时刷新,刷新以行为单位进行,
在访存期间不允许刷新
- 集中刷新:在一个刷新周期内,利用一段固定的时间依次对存储器的所有行进行逐一再生,在此期间停止对存储器的读写操作,称为死时间,又称访存死区
- 优点:读写操作时不受刷新工作的影响
- 缺点:存在死区,在死区期间不能访问存储器
- 分散刷新:存储器的系统工作周期分为两部分:前半部分用于正常读,写操作,后半部分用于刷新
- 优点:没有死区
- 缺点:增加了系统的存取周期,降低了整机的速度
- 异步刷新:将刷新周期除以行数得到两次刷新操作之间的时间间隔t,利用逻辑电路每隔时间T产生一次刷新请求
- 优点:缩短死时间,减少了刷新次数,提高了整机的工作效率
DRAM刷新注意的问题:
- 刷新对CPU是透明的,即刷新不依赖于外部的访问
- DRAM刷新单位是行
- 刷新时整个存储器中的所有芯片同时被刷新
假设DRAM内部有128行×128列的存储单元,并且每个读写周期是0.5us,那么电容可以坚持的最长的时间是 2ms/0.5us=4000个读写周期,读写周期也称为存取周期
-
思路一:每次读写完都刷新一行【分散刷新】
- 我们有128行,每刷新一行都需要0.5us,若每次读写完都刷新一行,则系统的存取周期就会变成1us,前0.5us时间用于正常读写,后0.5us时间用于刷新某行。也就是2ms的时间内总共会有2000次刷新操作。这2000次刷新操作足够在2ms内给128行
以上是关于向题看齐408之计算机组成原理概念记忆总结的主要内容,如果未能解决你的问题,请参考以下文章
- 我们有128行,每刷新一行都需要0.5us,若每次读写完都刷新一行,则系统的存取周期就会变成1us,前0.5us时间用于正常读写,后0.5us时间用于刷新某行。也就是2ms的时间内总共会有2000次刷新操作。这2000次刷新操作足够在2ms内给128行