- 前言
- 第一章:计算机系统概述
- 发展历程
- 计算机硬件
- 存储程序
- 程序控制
- 冯诺依曼计算机⭐⭐
- 冯诺依曼结构的特点⭐⭐
- 计算机软件
- 应用软件
- 系统软件
- 计算机系统层次结构⭐
- 计算机性能指标及评价
- 基本性能指标
- 字长
- 主存容量
- 时间相关的性能
- 时钟周期
- CPI⭐⭐
- CPU时间⭐
- IPC⭐
- MIPS⭐⭐
- 零散知识点⭐⭐
- 第二章:数据表示&运算
- 数据表示
- 数的机器码
- 原码
- 反码⭐⭐
- 补码⭐⭐⭐
- 数据计算
- 进制转换⭐⭐⭐⭐
- 二进制转化十进制
- 十进制转二进制
- 二进制转八进制 & 二进制转 16进制
- IEEE754浮点数⭐⭐⭐⭐
- 浮点运算⭐⭐⭐⭐
- 加减法步骤
- 浮点乘除法
- 浮点乘法
- 浮点除法
- 定点加减法⭐⭐⭐⭐
- 定点加法:
- 定点减法
- 溢出判断⭐⭐⭐⭐
- 定点乘法⭐⭐⭐⭐
- 原码一位乘法
- 机器实现
- 补码一位乘法
- 定点除法⭐⭐⭐
- 原码除法
- 恢复余数法
- 不恢复余数法
- 补码除法⭐⭐
- 第三章:存储系统
- 存储器概述
- 存储器分类
- 按存储介质分类
- 按存取方式分类⭐
- 存储器的性能指标⭐
- 存储芯片的基本结构&寻址
- 存储芯片的基本结构⭐
- 寻址⭐
- 半导体存储器
- 半导体存储芯片的基本结构⭐
- 只读存储器⭐
- 主存的组织与CPU连接
- 位扩展⭐⭐
- 字扩展⭐⭐
- 主存与CPU的连接例题⭐⭐⭐⭐
- Cache
- 性能分析⭐⭐
- 地址映射⭐⭐
- 全相联映射⭐⭐⭐
- 应用场景
- 例题
- 直接相联映射⭐⭐⭐
- 应用场景
- 例题
- 组相联映射⭐⭐
- 应用场景
- 例题
- 地址映射小结
- Cache中主存替换算法⭐⭐
- FIFO
- LRU
- RAND
- Cache写入数据
- 写回法
- 写穿法
- Cache工作原理
- 零散知识点⭐⭐
- 第四章:指令系统
- 指令格式
- 地址码⭐⭐⭐
- 扩展操作码⭐⭐⭐
- 设计扩展操作码注意:
- 扩展操作码例题⭐⭐⭐⭐
- 操作类型
- 数据传送
- 算术逻辑操作
- 移位
- 转移
- 输入输出
- 其它
- 数据存放⭐⭐
- 寻址方式
- 指令寻址
- 数据寻址
- 立即寻址⭐⭐⭐
- 直接寻址⭐⭐⭐
- 间接寻址⭐⭐⭐
- 寄存器寻址⭐⭐⭐
- 寄存器间接寻址⭐⭐
- 隐含寻址⭐⭐
- 相对寻址⭐⭐⭐
- 例题
- 基址寻址⭐⭐
- 变址寻址⭐⭐
- 堆栈寻址
- 寻址表
- 零散知识点
- 第五章:CPU中央处理器
- CPU功能⭐
- 指令控制
- 操作控制
- 时序控制
- 数据加工
- 中断处理
- CPU组成⭐⭐
- 运算器
- 控制器
- 指令周期⭐⭐⭐
- 基本概念
- 总线系统
- 总线仲裁⭐
- 集中仲裁方式
- 链式查询方式
- 计数器定时
- 独立请求方式
在开始前,我会用⭐来标记这个知识点,或者这一个板块的重要程度,最多4颗⭐,最少0颗⭐
第一章:计算机系统概述 发展历程- 电子管计算机(1946-1958年)
- 晶体管计算机(1958-1964年)
- 集成电路计算机(1964-1971年)
- 超大规模集成电路计算机(1971年至今)
将接替的步骤编制为程序,然后将程序和运行程序所需要的数据以二进制的形式存放到存储器中,方便执行。
程序控制指计算机中的控制器逐条取出存储器中的指令并按照顺序执行,控制各功能部件进行相应的操作
冯诺依曼计算机⭐⭐五大部件:
- 运算器
- 控制器
- 存储器
- 输入设备
- 输出设备
注:运算器和控制器又合称为中央处理器(CPU)
主机由CPU和存储器组成
冯诺依曼结构的特点⭐⭐- 计算机中采用二进制表示信息
- 采用程序存储的思想
- 单处理机结构,机器以运算器为中心
- 将软件和硬件完全分离
- 指令顺序执行
- 指令由操作码和操作数组成
为用户为解决某种应用问题而编制的程序,如QQ、微信、游戏等应用
系统软件用于对计算机系统进行管理、调度、监视、服务等,目的是为了方便用户、提高计算机使用效率、扩充系统的功能,例如:Linux、UNIX、Windows等
计算机系统层次结构⭐-
逻辑门层:
是最底层的硬件系统,由逻辑门、触发器等逻辑电路组成
-
微代码层:
实际的机器层,用户使用微指令编写微程序然后由硬件直接执行(注:只有采用微程序设计的计算机系统才有这一层)
-
指令集架构层:
可以通过机器语言编写程序实现对计算机硬件的控制
-
操作系统层:
用于对计算机的系统硬件和软件资源的统一管理
-
汇编语言层:
为用户提供基于助记符表示的汇编语言编程
-
高级语言层:
用户使用与机器无关的高级语言编程,编程过程中无需知道底层内容
先提一下主频1GHZ可以简单的理解为CPU在1s时间内的时钟周期数为1G条
1 G = 1 × 1 0 9 H Z 1G =1\times 10^9HZ 1G=1×109HZ
基本性能指标 字长- 字长越长,计算精度越高
- 字长越长,定点数的表示范围也就越长
主存容量是指主存能存储的最大信息量,一般用 M × N M\times N M×N表示,其中:
- M表示存储单元(字容量)
- N表示每个存储单元的二进制位数
指的是CPU完成一个最简单或者说是基本的动作所需要花费的时间,通常时钟周期越短说明CPU性能越强
eg: 1 G H z ( 1 0 9 H z ) 1GHz(10^9Hz) 1GHz(109Hz)的CPU时钟周期为 1 n s 1ns 1ns
CPI⭐⭐指的是执行每条指令所需要的平均时钟周期数
假如程序中包含的总指令条数用 I C IC IC表示,程序执行所需要的时钟周期数为 m m m,时钟周期为 T T T,频率为 f f f,则根据CPI的定义可得 C P I = m I C CPI = \frac{m}{IC} CPI=ICm
如果知道某程序中每条指令的使用频率( P i P_i Pi)、每一类指令的CPI( C P I i CPI_i CPIi),每类指令的条数( I C i IC_i ICi),则程序的CPI可以表示为: C P I = ∑ i = 1 n ( C P I i × P i ) = ∑ i = 1 n ( C P I i × I C i I C ) CPI = \sum_{i=1}^n (CPI_i \times P_i) = \sum_{i=1}^n(CPI_i\times \frac{IC_i}{IC}) CPI=i=1∑n(CPIi×Pi)=i=1∑n(CPIi×ICICi)
CPU时间⭐某段程序的CPU时间 T c p u T_{cpu} Tcpu: T c p u = C P U 总时钟周期数 主频 = C P U 总时钟周期数 每秒可执行的时钟周期数 = m × T = m f = C P I × I C × T = C P I × I C f T_{cpu} = \frac{CPU总时钟周期数}{主频}=\frac{CPU总时钟周期数}{每秒可执行的时钟周期数} = m \times T = \frac{m}{f} = CPI\times IC \times T = \frac{CPI\times IC}{f} Tcpu=主频CPU总时钟周期数=每秒可执行的时钟周期数CPU总时钟周期数=m×T=fm=CPI×IC×T=fCPI×IC
IPC⭐是指每个时钟周期CPU能执行的指令条数,即CPI的倒数 I P C = 1 C P I IPC = \frac{1}{CPI} IPC=CPI1
MIPS⭐⭐每秒执行百万条指令数(意思就是每秒 c p u cpu cpu能算多几个百万的指令) M I P S = 主频 C P I × 1 0 6 = I C T c p u × 1 0 6 = f C P I = I P C × f MIPS =\frac{主频}{CPI\times 10^6}=\frac{IC}{T_{cpu}\times 10^6} = \frac{f}{CPI} = IPC \times f MIPS=CPI×106主频=Tcpu×106IC=CPIf=IPC×f 其中 f f f表示的是频率 f = 1 T f = \frac{1}{T} f=T1
零散知识点⭐⭐注意加粗的内容是挖空的地方。
- 主机由CPU(中央处理器)和内存储器组成
- 现在主要采用总线结构作为微型计算机硬件之间的连接方式⭐⭐
- 计算机系统由软件系统和硬件系统构成
- 计算机硬件系统由运算器、存储器、控制器、输入设备、输出设备部件构成
- 软件系统分为系统软件和应用软件
- 计算机硬件系统结构的核心是数据通路结构
- 基本字长是指的是操作数的基本位数
- 主存的最大可编址单元数(编址空间)是由地址线的位数决定的
- 通常划分计算机发展时代是以所用电子器件为标准的
- 冯诺依曼计算机结构的核心思想是存储程序控制
- 计算机存储系统指的是高速缓存、主存和辅存
- 计算机硬件能直接执行的只有机器语言⭐⭐
- 用于科学计算的计算机中,标志系统性能的主要参数是MFLOPS
- 计算机的存储系统:主存、辅存、高速缓存
原码也就是该数的二进制形式,如果是有符号的话那么最高位是符号位,1表示负数,0表示正数
反码⭐⭐- 如果原码是正数,那么该原码的反码和原码等价
- 如果原码是负数,那么符号位不变,其他位取反
-
正数的补码和原码相同
-
负数的补码先对除了符号位的其他位取反然后加1
-
补码右移
- 如果是正数那么右移的时候最高位用0补齐
- 如果是负数那么右移的时候最高位用1补齐
通过按权相加法:
- 整数部分
2 0 + 2 1 + 2 2 + … … + 2 n − 1 2^0+2^1+2^2+……+2^{n-1} 20+21+22+……+2n−1
- 小数部分
2 − 1 + 2 − 2 + … … + 2 − m 2^{-1}+2^{-2}+……+2^{-m} 2−1+2−2+……+2−m
然后将其求和即可得
十进制转二进制- 整数部分
除基取余法:对这个整数不断取余2,然后除2直到这个数为0,最后逆序连起来就是这个二进制
eg:
求11的二进制
11 % 2 = 1
5 % 2 = 1
2 % 2 = 0
1 % 2 = 1
逆序连起来11的二进制为:1011
- 小数部分
乘基取整法:对这个小数不断乘2,然后直到小数部分为全0,然后整数部分(非0值为1)从上往下连起来就是这个二进制
eg:
求0.6875的二进制
0.6875 x 2 = 1.375 => 1
1.375 x 2 = 0.75 => 0
0.75 x 2 = 1.5 => 1
1.5 x 2 = 3 => 1
顺序连起来这个0.6875的二进制为:0.1011
二进制转八进制 & 二进制转 16进制
三位二进制 = 一位八进制
四位二进制 = 一位十六进制
IEEE754浮点数⭐⭐⭐⭐表示方法: X = − 1 S × ( 1. M ) × 2 e X = -1^S \times (1.M) \times 2 ^ e X=−1S×(1.M)×2e
-
S(数符):1位
0为正,1为负
-
E(阶码):8位
E = e + 127,e的计算方法为在二进制下的该数的小数点向左移动e位使得该数表示形式位1.M
-
M(尾数):23位
M见上面e的求法,移完后即是M
总共32位
eg:
求37.25的浮点数
step1:先将数转化为二进制
37.25 = 100101.01 S = 0
step2:看看小数点应该向左移动多少位,求E并转化为二进制
e = 5 E = e + 127 = 132 = 10000100
step3:求出M,也就是小数点移动后小数点右边的,不够23位的话,后面用0补齐
M = 00101010000000000000000
step4:将这个浮点数用32为二进制表示出来
0 10000100 00101010000000000000000
同理给你一个2进制的浮点数表示,我们将其拆分为三个板块,然后一一计算即可
eg:
16进制的:BF400000
step1:转化为二进制
1 01111110 1000000000000000000000
step2:分别计算S,M,e
S = 1
M = 1
e = 126-127 = -1
step3:
带入公式中可得这个浮点数为-0.75
浮点运算⭐⭐⭐⭐
加减法步骤
- ① 对阶
小阶向大阶对齐
- ② 位数运算
如果是加法那么就相加,如果是减法那么就相减
-
③ 规格化
-
④ 舍入
-
⑤ 判溢出
举例: 2 111 × ( 0.11001 ) − 2 110 × ( − 0.10111 ) 2^{111} \times (0.11001) - 2^{110} \times (-0.10111) 2111×(0.11001)−2110×(−0.10111) [ X ] 补 = 00111 , 00.11001 [X]_补 = 00111,00.11001 [X]补=00111,00.11001
[ − Y ] 补 = 00110 , 00.10111 [-Y]_补 = 00110,00.10111 [−Y]补=00110,00.10111
逗号前面是阶码,后面是尾数
- ① 对阶
阶差 [ △ E ] 补 = [ E x ] 补 + [ − E y ] 补 = 00111 + 11010 = 00001 阶差[\vartriangle E]_补 = [Ex]_补 + [-Ey]_补 = 00111 + 11010 = 00001 阶差[△E]补=[Ex]补+[−Ey]补=00111+11010=00001
X的阶码比Y的阶码大1。需将Y的阶码加1,尾数右移1位(阶码加,尾数右移,阶码减,尾数左移)
[ − Y ] = 00111 , 00.01011 ( 1 ) [-Y] = 00111,00.01011(1) [−Y]=00111,00.01011(1)
- ② 尾数运算
00.11001 × 2 111 + 00.010111 × 2 111 = 01.001001 × 2 111 00.11001\times 2^{111} + 00.010111 \times 2^{111} =01.001001 \times2^{111} 00.11001×2111+00.010111×2111=01.001001×2111
- ③ 规格化
尾数运算发生上溢,需向右规格化1位,即尾数右移1次,阶码加1
[ X − Y ] 补 = 01000 , 00.10010 ( 01 ) [X-Y]_补 = 01000, 00.10010(01) [X−Y]补=01000,00.10010(01)
- ④ 判溢出
规格化处理时阶码发生了上溢,所以浮点数运算发生了溢出
浮点乘除法 浮点乘法- 阶码相加
阶码相加可能会产生溢出,要进行溢出判断
- 尾数相乘
尾数相乘可得积的尾数,可按定点乘法运算方法运算
- 结果规格化
上溢时右归,下溢时左归
浮点除法- 尾数调整
先看看除数的尾数的绝对值是否大于被除数的尾数的绝对值,如果小于的话那马可以将被除数的尾数右移一位,然后将被除数的阶码+1
- 阶码求差
被除数的阶码减去除数的阶码
- 尾数相除
除数的尾数除去被除数的尾数
- 规格化
规格化参照前面
定点加减法⭐⭐⭐⭐ 定点加法:[ A ] 补 + [ B ] 补 = [ A + B ] 补 [A]_补+[B]_补 = [A+B]_补 [A]补+[B]补=[A+B]补
[ A + B ] 补 = [ A ] 补 + [ B ] 补 [A+B]_补 = [A]_补+[B]_补 [A+B]补=[A]补+[B]补
定点减法[ A − B ] 补 = [ A ] 补 + [ − B ] 补 [A-B]_补 = [A]_补+[-B]_补 [A−B]补=[A]补+[−B]补
溢出判断⭐⭐⭐⭐我们将符号位扩充为两位相同的,例如原数为+1011,那么其补码就为01011,现在我们扩充后补码为001011,如果经过计算后,两符号位仍然相同(比如00,11)那么就没有发生溢出,否则就发生溢出
eg:
X = 1100 , Y = 1000 X = 1100,Y = 1000 X=1100,Y=1000
[ X ] 补 = 001100 [X]_补 = 001100 [X]补=001100
[ Y ] 补 = 001000 [Y]_补 = 001000 [Y]补=001000
[ X ] 补 + [ Y ] 补 = 010100 [X]_补 + [Y]_补 = 010100 [X]补+[Y]补=010100
故溢出
定点乘法⭐⭐⭐⭐ 原码一位乘法转化为二进制,然后相乘,符号位相异或即可
机器实现用王道的一张PPT来说明
MQ和ACC每次计算后右移一位,通过ALU将X加在ACC上面。
补码一位乘法符号位和原码相同,进行异或运算,然后补码转为原码进行相乘计算即可
或者通过新增一位辅助位,进行n轮运算
不管是原码除法还是补码除法,符号位都是通过异或单独来计算的
原码除法 恢复余数法还是王道的PPT
恢复余数法的流程是首先在低位商1,并且加上 [ − ∣ Y ∣ ] 补 [-|Y|]_补 [−∣Y∣]补,如果此时符号位为1那么先逻辑左移再加上 [ ∣ Y ∣ ] 补 [|Y|]_补 [∣Y∣]补,如果为0那么直接左移就好了
手算流程:
不恢复余数法其实就是在恢复余数法当余数为负的时候通过对余数逻辑左移一位,再加上除数即可省去恢复余数的操作
证明请看如下图片:
然后再附上不恢复余数法的计算流程:
和原码不一样的地方在于商的情况以及最后一步的操作
(1)半导体存储器: TTL、MOS (2)磁表面存储器:磁头、磁载体 (3)磁芯存储器:硬磁材料、环状元件 (4)光盘存储器:激光、激光材料
按存取方式分类⭐随机存储器
只读存储器
顺序存储器和直接存取存储器。
(1)随机存储器(RAM) RAM是一种可读/写存储器,其特点是存储器的任何一个存储单元的内容都可以随机存取,而且存取时间与存储单元的物理位置无关。计算机主存都采用这种随机存储器。 (2)只读存储器(ROM) 只读存储器只能对其存储的内容读出,而不能对其重新写入的存储器。 (3)串行访问存储器 顺序存取存储器: 磁带 直接存取存储器: 磁盘
用一张PPT来总结
- 存储容量:存储字数 * 字长(eg:1M*8位)
- 存储成本:每位价格=总成本/存储容量
- 存储速度:数据传输率=数据的宽度/存储周期
- 存取周期™:又称为读写周期或访问周期。它是指存储器进行一次完整的读写操作所需要的全部时间,即连续两次独立地访问存储器操作之间间隔的最小时间
- 主存带宽(Bm):主存带宽又称为数据传输率,表示每秒从主存进出信息的最大数量(因为信息的进出不一定一直是连续的),单位为字/秒或者字节/秒或者位/秒
- 译码驱动电路
将来自地址总线的地址信号翻译成对应存储单元的宣统信号,该信号在读写电路的配合下完成对被选中单元的读写操作
- 存储矩阵
由大量相同的位存储单元阵列构成
- 读写电路
包含读出放大器和写入电路,用来完成读/写的操作
- 读写控制线(可能分成两条线,或者一条线)
决定芯片进行读写操作
- 片选线
确定哪个存储芯片被选中。可以用于容量扩充
- 地址线
单向输入,位数与存储字的个数有关
- 数据线
双向输出,位数与读出或写入的位数有关
寻址⭐- 按照字节、字、半字、双字寻址
- 多字节存放:大端方式和小端方式
大端方式将数据高位存放在地址低位上面,小端方式将数据低位放在地址低位上面
下图是一个汇总
(1)存储矩阵(存储体):由大量相同的位存数单元阵列构成 (2)译码驱动器:将来自地址总线的地址信号翻译成对应存储单元的选通信号,该信号在读写电路的配合下完成对被选中单元的读写操作 (3)读写电路:包括读出放大器和写入电路,用来完成读写 (4)读写控制线:决定芯片进行读写操作 (5)片选线:确定哪个存储芯片被选中 (6)地址线:单向,位数与存储字个数有关 (7)数据线:双向,位数与读出或写入数据位数有关 分为静态RAM和动态RAM,静态被用于Cache,动态用于主存
只读存储器⭐- 掩膜式只读存储器(MROM):厂商直接写入内容,无法改变,优点可靠性高,集成度高,价格便宜,但灵活性差
- 一次可编程只读存储器(PROM):一旦编程写入,不可更改
- 可擦除可编程存储器(EPROM):需将其全部擦除,然后再编程,分为紫外线擦除(UVEPROM)和电擦除( )
- 闪存(Flash Memory):既可在不加电情况下长期保存信息,又能在线进行快速擦除与重写
- 固态硬盘(SSD):相对于传统硬盘,具有读写快,低功耗,缺点是价格高
位扩展就是每一个存储芯片接在一条数据总线上面,如下图
字扩展就是同一条数据总线连接多个存储器,并通过一个译码器分配存储器的使用,如下图
Cache实际上是一个容量较小的SRAM,我们将主存中经常访问或者即将进行访问的数据先放入Cache中,然后CPU直接对Cache中的数据快速访问,这也被称作为局部性原理,以实现提升系统性能。
如下图:
设命中率为H,在一个程序执行期间Cache的总命中率次数为 N c N_c Nc,则 H = N c N c + N m H = \frac{N_c}{N_c+N_m} H=Nc+NmNc,缺失率 M = 1 − H M=1-H M=1−H
设 t c t_c tc为命中时的Cache访问时间, t m t_m tm为未命中时的访问时间,那么Cache主存系统的平均访问时间 T a T_a Ta为:
T a = H × t c + ( 1 − H ) × t m T_a = H\times t_c + (1-H)\times t_m Ta=H×tc+(1−H)×tm
给一道例题:
地址映射是指把主存地址空间映射到Cache地址空间,也就是把存放在主存中的程序按某种规则放入Cache;在Cache中要为每一块加一个标记,指明它是主存中那一块副本,为了说明标记是否有效,每个标记至少设置一个有效位,为1时表示Cache映射到主存块数据有效
全相联映射⭐⭐⭐任何主存地址可映象到任何Cache地址的方式。在这种方式下,主存中存储单元的数据可调入到Cache中的任意位置。只有在Cache中的块全部装满后才会出现块冲突
应用场景- 块映射灵活,一对多映射
- cache全部装满后才会出现块冲突
- cache全部装满后才会出现块冲突
- 淘汰算法复杂
- 命中率高
将主存地址映象到Cache中的一个指定地址。任何时候,主存中存储单元的数据只能调入到Cache中的一个位置,这是固定的,若这个位置已有数据,则产生冲突,原来的块将无条件地被替换出去
应用场景- 块映射速度快,一对一映射
- 利用索引字段直接对比相应标记位即可
- 查找表可以和副本一起存放,无需相联存储器
- cache容易冲突,cache利用率低
- 淘汰算法简单
- 命中率低,适合大容量cache
是将存储空间的页面分成若干组,各组之间的直接映象,而组内各块之间则是全相联映象
(这里说一下x路组相联,实际上就是说一个组里面有x个数据块,eg:4路组相联即表示分成的每一组里面有4个数据块)
应用场景- 容量小的cache可采用全相联映射或组相联映射
- 容量大的可采用直接映射方式
- 查找速度快,命中率相对低
- 但cache容量大可提高命中率
这个例题要参考一下下面的替换算法
(1)先进入Cache的数据块最先出去 (2)实现方便,利用了主存历史的信息 (3)不能正确反映程序局部性原理,命中率不高,可能出现一种异常现象.
LRU(1)选择近期最少访问的数据块先出去 (2)比较正确反映程序局部性,利用访存的历史信息,命中率较高 (3)实现较复杂
RAND随机法是随机地确定被替换的块,比较简单,可采用一个随机数产生器产生一个随机的被替换的块,但它也没有根据访存的局部性原理故不能提高Cache的命中率。
Cache写入数据对Cache的写操作,情况比读操作要复杂一些.由于写入Cache时,并没有写入主存,因此就出现Cache和主存数据不一致的情况.如何处理Cache和主存不一致的方法就称为更新策略
写回法1)是指在CPU执行写操作时,信息只写入Cache中,仅当需要替换时,才将改写过的Cache块先送回主存(写回),然后再调块(设置dirty位)
2)有利于省去许多将中间结果写入主存的无谓开销
3)需设修改位增加Cache的复杂性
写穿法1)在写操作时,将数据同时写入Cache和主存
2)实现开销小,简单
3)为了写中间结果浪费了不少时间
Cache工作原理- 计算机的存储器采用分级存储体系的目的是:解决存储容量价格与存储速度间的矛盾
- 虚拟存储器由:物理的内存和硬盘上的虚拟内存组成
- 主存由:RAM和ROM组成
- RAM:断电后RAM内保存的信息会丢失
- ROM:断电后ROM内保存的信息不会丢失
- 存取时间:指从读/写命令发出,将数据传输操作完成所经历的时间
- 存取周期 = 存取时间+恢复时间
- 动态RAM:需要对存储内容定时动态刷新(否则会丢失信息)
- 刷新时间 = 存储矩阵的行数 X 刷新周期
- 只读存储器的类型
- 掩模式只读存储器(MROM)
- 可编程只读存储器(PROM)
- 光擦可编程只读存储器(EPROM)
- 电擦可编程只读存储器(EEPROM)
- 位扩展法:CPU数据线数与存储芯片的数据位数不一定相等,用多个存储器扩展,使其数据位数与CPU数据线数相等;例如用8片 位RAM芯片组成 位存储器(连接地址线方式相同,但连接数据线方式不同,片选信号要连接到所有芯片)
- 字扩展法:增加存储器的字的数量,而位数不变,例如用4片 位RAM组成 位存储器(连接地址线方式相同,连接数据线的方式也相同,某一时刻只需选中部分芯片)
- 字位扩展法:例如用8片 位RAM芯片组成 位存储器,每两片构成一组,一共有4组(连接地址线相同,数据线不同)
定长指令字结构:指令长度固定
变长指令字结构:指令长度不等
扩展操作码⭐⭐⭐将操作码的其中一种或者多种状态保留(一般是全一的情况),然后向后拓展一个字段的操作码
详情看下图:
- 不允许短码是长码的前缀,即短的操作码不能与长操作码的前面部分的代码相同,不然在进行指令判断的时候就不能判断是那一位的扩展
- 各指令的操作码不允许重复
- 通常情况下,对于使用频率较高的指令,分配较短的操作码;对于使用频率较少的指令分配较长的操作码,从而尽可能减少指令译码和分析时间
数据传送包括寄存器与寄存器、寄存器与存储单元、存储单元与存储单元之间的传送
LOAD 作用:把存储器中的数据放到寄存器中
STORE 作用:把寄存器中的数据放到存储器中
算术逻辑操作这操作可实现算术运算(加,减,乘,除,增1,减1,取负即求补,浮点运算、十进制运算)逻辑运算(与,或,非,异或、位操作、位测试、位清楚、位取反)
移位移位可分为算术移位,逻辑移位和循环移位三种
转移(1)无条件转移 JMP
不受任何约束条件直接把程序转移到下一条需执行指令的地址
(2)条件转移
- JZ:结果位0
- JO:结果溢出
- JC:结果有进位
(3)调用与返回
-
子程序可在多处被调用
-
子程序调用可出现在子程序中,即允许子程序嵌套
-
每个CALL指令都对应一条RETURN指令
CPU必须记住返回地址,使子程序能准确返回,返回地址存放在以下3处
-
寄存器内:机器内设有专用寄存器,专用于存放返回地址
-
子程序的入口地址内:
-
栈顶内:现代计算机都设有堆栈,执行RETURN指令后,便可自动从堆栈内取出应返回的地址。
(4)陷阱(Trap)与陷阱指令
其实是一种意外事故的中断,一般不提供给用户使用,作为隐指令,再出现故障时,由CPU自动产生并执行。
输入输出对于I/O单独编址的计算机而言,通常设有输入输出指令,他完成从外设中的寄存器读入一个数据到CPU寄存器内,或将数据从CPU的寄存器输出至某外设的寄存器中
其它包括等待指令、停机指令、空操作指令、开中断指令、关中断指令、置条件码指令等
数据存放⭐⭐如下图总结
下一条欲执行指令的指令地址->始终由程序计数器PC给出
- 顺序寻址 (PC)+1->PC
- 跳跃寻址 由转移指令指出,直接覆盖PC
构成:
操作码(OP) + 寻址特征 + 形式地址(A)
eg:
一地址指令:操作码(OP) + 寻址特征 + 形式地址(A)
二地址指令:操作码(OP) + 寻址特征 + 形式地址(A1) + 寻址特征 + 形式地址(A2)
立即寻址⭐⭐⭐在多次间址访问的时候我们在地址前加一个标识位,当该位置位0时,就说明找到了,位1则表明还没找到
寄存器寻址⭐⭐⭐变址寻址和基址寻址是类似的,只不过变址寻址将基址寻址的基址寄存器变成了变址寄存器
在一般计算机中,堆栈主要用来暂存中断和子程序调用时现场数据及返回地址,用于访问堆栈的指令只有压入(即进栈)和弹出(即退栈)两种,它们实际上是一种特殊的数据传送指令:
压入指令(PUSH)是把指定的操作数送入堆栈的栈顶;
弹出指令(POP)的操作刚好相反,是把栈顶的数据取出,送到指令所指定的目的地.
一般的计算机中,堆栈从高地址向低地址扩展,即栈底的地址总是大于或等于栈顶的地址(也有少数计算机刚好相反)当执行压入操作时,首先把堆栈指针(SP)减量(减量的多少取决于压入数据的字节数,若压入一个字节,则减1;若压入两个字节,则减2,以此类推),然后把数据送人SP所指定的单元;当执行弹出操作时,首先把sp所指定的单元(即栈顶)的数据取出,然后根据数据的大小(即所占的字节数)对SP增量.
寻址表 寻址方式有效地址隐含寻址程序指定立即寻址A即是操作数直接寻址EA=A一次间接寻址EA=(A)寄存器寻址EA = Ri寄存器间接一次寻址EA = (Ri)相对寻址EA = (PC) + A基址寻址EA = (BR) + A变址寻址EA = (IX) + A 零散知识点-
显地址:指令代码写明主存储器单元地址码
-
隐地址:事先约定,指令不必给出(减少了指令的地址数量,增加了指令或者数据地址的种数)
-
指令由操作码和地址码构成
-
操作码用来表示该指令所要完成的操作(如加,减,乘,除,数据传送等),其长度取决于指令系统中的指令条数.如操作码占7位,则该机器最多包含27=128条指令.
-
地址码用来描述该指令的操作对象,或直接给出操作数或指出操作数的存储器地址或寄存器地址(即寄存器名)
-
指令执行过程
- 读取指令
指令地址(在PC中)送到地址寄存器
读主存,读出内容(指令代码)送入指令寄存器IR
- 分析指令
形成下一条指令的地址并送到PC中
- 执行指令
用一到几个执行步骤,完成指令的运算、操作功能,
不同的指令操作步骤和具体运算、操作功能各不相同
检查有无中断请求,无中断请求、进入下一条指令的执行过程
-
隐含寻址:不是明显的给出操作数的地址,而是指令中隐含着操作数的地址;如单地址指令格式,第二个操作数是累加器ACC提供的,所以ACC对于单地址指令格式来说就是隐含地址;有利于缩短指令字长,但需增加硬件
-
立即数寻址:地址字段给出的不是操作数的地址而是操作数本身;不访问内存,执行时间短
-
直接寻址:指令字中形式地址A就是操作数的真实地址EA,EA=A;执行阶段仅访问一次主存,但A的位数决定了该指令操作数寻址范围,操作数地址不易修改
-
间接寻址:指令地址段给出的形式地址是操作数有效地址所在的存储单元的地址,也就是操作数的地址,即EA=(A),间接寻址可以是一次也可能是多次;扩大寻址范围,便于编制程序,但指令执行阶段需要多次访问主存,一般用寄存器间接寻址代替
-
寄存器寻址:指令字中直接给出操作数所在寄存器编号,即EA=Ri,操作数由寄存器给出
-
寄存器间接寻址:寄存器Ri中给出的不是一个操作数,而是操作数所在主存单元的地址,即EA=(Ri);
-
相对寻址:把程序计数器PC内容加上指令地址中形式地址A,即EA=(PC)+A,其中A是相当与当前指令地址的位移量;操作数地址不固定,随PC变化而变化,用于转移指令,编制浮动程序
-
基址寻址:将CPU中基址寄存器BR的内容加上指令格式中形式地址A,EA=(BR)+A,程序运行中,基址寄存器内容不变(作为基地址),形式地址可变(作为偏移量)
-
变址寻址:形式地址A加上变址寄存器IX内容,即EA=(IX)+A;变址寄存器面向用户,变址寄存器可由用户改变(作为偏移量),形式地址A不变(作为基地址);扩大寻址范围,可用于数组处理,适于编制循环程序
取指令、分析指令和执行指令
操作控制CPU控制指令的操作信号
时序控制对各种操作加以时间控制
数据加工算术逻辑运算
中断处理对异常和特殊请求(如IO请求)做出处理
CPU组成⭐⭐ 运算器算术逻辑单元、暂存寄存器(对应用程序员透明)、累加器(是个通用寄存器)、通用寄存器组(存放操作数,包括源操作数、目的操作数和中间操作数,SP是堆栈指针,指示栈顶地址)、程序状态字寄存器PSW、移位器、计数器
控制器执行指令,每条指令的执行是由控制器发出的一组微操作实现的
-
①程序计数器(PC):用于指出下一条指令在主存的地址,PC有自增功能
-
②指令寄存器(IR):保存当前执行的指令
-
③指令译码器:仅对操作码字段进行译码
-
④存储器地址寄存器(MAR):存放所要访问的主存单元的地址
-
⑤存储器数据寄存器(MDR):存放向主存写入的信息或从主存读出的信息
-
⑥时序系统:产生各种时序信号
-
⑦微操作信号发生器:根据IR内容、PSW内容及时序信号,产生控制整个计算机的信号,结构有组合逻辑型和存储逻辑型
注:
- 寄存器可以分为两类,一是用户可见,可对其编程,如通用寄存器组、PSW、PC;二是用户不可见,如MAR、MDR、IR
- 指令寄存器的位数取决于存储容量,通用寄存器位数取决于机器字长
一、CPU每取出并执行一条指令所需的全部时间称为指令周期,也即CPU完成一条指令的时间。
二、此外,当遇到间接寻址的指令时,由于指令字中只给出操作数有效地址的地址,因此,为了取出操作数,需先访问一次存储器,取出有效地址,然后再访问存储器,取出操作数。 间接寻址的指令周期包括,取指周期、间址周期和执行周期三个周期。
三、带有中断周期的指令周期
将所有总线请求集中起来,利用一个特定的裁决算法进行裁决
链式查询方式当一个或多个设备同时发出总线使用请求信号BR时,中央仲裁器发出的总线授权信号BG沿着菊花链串行的从一个设备依次传送到下一个设备,到达离出发点最近的发出总线请求的设备之后就不再往下传;离总线控制器越近,优先级越高;优点是查询有优先级固定,结构简单;缺点是对硬件电路敏感,且优先级不能改变,优先级低的会饿死
计数器定时总线上多个设备通过总线请求信号BR,发出请求,中央仲裁器接收到请求信号后,在总线忙信号BS为“0”的情况下,让计数器开始计数,计数值通过一组地址线发往各设备.每个设备有一个地址判别电路,如果地址线上的计数值与总线请求设备地址一致,则该设备对BS线置“1”,表示该设备获得了总线使用权,同时中止计数查询;优点是优先级可以改变;缺点是增加控制线数;若从上次计数终止的地方开始,则每个设备使用总线机会相等
独立请求方式每个连接到总线的设备都有一组单独的总线请求信号BRi与总线授权信号BGi.每个设备请求使用总线时,它们各自发出自己的总线请求信号.中央仲裁器中设置了一个专门的排队电路,由它根据一定的优先次序决定优先响应哪个设备的请求,然后给该设备总线授权信号BGi;优点是响应速度快,总线允许信号直接从控制器发送到设备,优先级控制灵活;缺点是控制线数过多(2n+1根)