向题看齐408之计算机组成原理概念记忆总结

Posted 生命是有光的

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了向题看齐408之计算机组成原理概念记忆总结相关的知识,希望对你有一定的参考价值。

408之计算机组成原理概念记忆总结

1、计算机系统概述

  1. 冯诺依曼计算机中CPU区分指令和数据的依据是?
    • 从时间的角度区分:指令周期的不同阶段
    • 从空间的角度区分:指令处于不同的寄存器(IR指令寄存器里面的就是指令,ACC累加器里面的就是数据)
  2. 冯诺伊曼计算机的特点
    • 计算机由五大部件组成:运算器、存储器、控制器、I/O设备
    • 指令和数据以同等地位存储在存储器中,并按地址询问
    • 指令和数据均以二进制代码表示
    • 指令由操作码和地址码组成,操作码用来表示操作的性质,地址码用来表示操作数在存储器中的位置
    • 指令在存储器内按顺序存放,通常指定是顺序执行的(顺序寻址),在特定条件下可根据运算结果或根据设定的条件改变执行顺序(跳跃寻址)
    • 早期的冯诺伊曼计算机以运算器为中心
    • 单处理机,基本工作方式是控制流驱动方式,以存储程序为思想
  3. 软件和硬件的功能是等效的,软件和硬件在逻辑功能上是等价

  1. 解释程序:逐句翻译、生成中间代码、不生成目标代码(边翻译边执行)

    编译程序:生成中间代码、生成目标代码

    解释和编译统称为翻译

  2. MAR存放欲访问的存储单元地址、PC存放下一条指令的地址、MDR存放从存储单元取来的数据、IR存放当前执行的指令

    • MAR存放存储单元地址,因此位数与地址码长度相同
    • MDR存放从存储单元取来的数据,因此位数与存储字长相同
  3. CPU存取速度:寄存器 > Cache > 内存

    • 寄存器在CPU内部速度最快

    • Cache采用高速的SRAM制作,而内存采用DRAM制作

  4. CPU由运算器控制器两个部件组成,而运算器和控制器中都含有寄存器

  1. 相联存储器既可以按地址寻址,又可以按内容寻址,为了与传统存储器区分,又称为按内容寻址的存储器

  2. 在计算机多层次结构中,上下层是可以分割的,且上层是下层的功能实现,此外上层在下层的基础上实现了更加丰富的功能,仅有下层而没有上层也是可以的

  3. 机器字长:CPU进行一次整数运算所能处理的二进制数据的位数(通常和ALU直接相关),也叫计算机的位数,等于寄存器的位数

    存储字长:一个存储单元中二进制代码位数(通常和MDR位数相同)

    指令字长:一条指令的总长度(可能会变)

    数据字长:数据总线一次能并行传送信息的位数

  4. 用户可见的寄存器(也就是用户可以设置值):通用寄存器组、程序状态字寄存器PSW、程序计数器PC

    用户不可见的寄存器:MAR、MDR、IR、暂存寄存器

  5. 如果计算机 按字节编址,则 每个存储单元大小为1字节,即1B,也就是8个二进制位。

    如果计算机 按字编址,则 每个存储单元大小为一个字字的长度取决于计算机字长是多少位,若题目条件说字长是16位,则一个字就是16个二进制位。也有的计算机字长是32位、64位等等。

  6. 小端方式:最低有效地址存放在更低地址(低存低)

  7. 边界对齐存储总空间是最大类型所占空间的整数倍

2、数据的表示和运算

2.1、进位计数制

  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×21=5.5:5.4>5×80+4×81=5.5:5.5>5×100+5×101=5.5:5.8>5×160+8×161=5.5

    • 十进制 => 任意进制

      • 整数部分除基取余法(余数从低到高),小数部分乘基取整法(整由高到低)
      • 拼凑法:最快将十进制转二进制的方法🔥
  2. 二进制 <=> 八进制

    • 二进制 => 八进制:3位二进制一组,每组转换成对应的八进制符号。不足3位的补0即可
    • 八进制 => 二进制:每位八进制对应3位二进制
  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、算数移位

  1. 原码的算数移位:符号位保持不变,仅对数值位进行移位。

    • 算数左移:低位补0,高位舍弃。

    • 算数右移:高位补0,低位舍弃。

    • 只对数值位移动,左移相当于×2,右移相当于÷2

  2. 反码的算数移位:

    • 正数反码的算数移位和原码的算数移位相同
    • 负数反码的算数移位和原码相反:
      • 算数左移:低位补1,高位舍弃。
      • 算数右移:高位补1,低位舍弃。
  3. 补码的算数移位:

    • 正数补码的算数移位和原码的算数移位相同

    • 负数补码中,最右边的1及其右边同原码的算数移位,最右边的1的左边同反码的算数移位

      • 算数左移(同原码):低位补0,高位舍弃
      • 算数右移(同反码):高位补1,低位舍弃
    • 不区分正数的另一种记忆规律:🔥

      • 补码的算数右移:符号位不动,数值位右移,符号位是啥就补啥
      • 补码的算数左移:符号位不动,数值位左移,通通补0

2.4.2、逻辑移位

可以把逻辑移位看作是对"无符号数"的算数移位

  • 逻辑右移:高位补0,低位舍弃
  • 逻辑左移:高位舍弃,低位补0

2.4.3、循环移位

不带进位位的循环移位:无论左移还是右移,都会将移出的数补到缺位的位置

带进位位的循环移位:

  • 带进位位的循环左移:数据位连同进位位一起左移,数据的最高位进入进位位CF,而进位位则补到空缺的位置

2.4.4、加减运算

  1. 补码的加减运算:无论加法还是减法,最后都会转变成加法,由加法器实现运算,符号位也参与运算

2.4.5、溢出判断

仅当两个符号相同的数相加两个符号相异的数相减才可能产生溢出,只需学习补码的溢出判断:

  1. 采用一位符号位

设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+ASBSSSV=0,V=1,
写在一起执行与运算(也就是),加号表示运算,上方画横线表示运算。

  1. 方法二:采用一位符号位,根据数据位进位情况判断溢出

    • 符号位的进位CS:符号位向更高位产生的进位数
    • 最高数值位的进位C1:尾数最高位向符号位产生的进位数
    • V=CS⊕C1 。若 V=0,表示无溢出,若V=1,表示有溢出(符号位的进位和最高数值位的进位相同则无溢出)
    • 异或逻辑:不同为1,相同为0
  2. 方法三:采用双符号位:正数符号为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、乘法运算(没时间不用看)

  1. 原码一位乘法:符号位单独处理——符号位 = xS⊕yS,数值位取绝对值进行乘法计算

  1. 写出[|x|] 、[|y|]
    • 直接在x、y的原码数值位小数点前面加两个0,就是[|x|] 、[|y|]
  2. 按如上图那样写,其中第二列只需写 [|y|] 的数值位即可,然后在末尾划条竖线,首先看竖线前的数字(运算位)
    • 若运算位=1,则(ACC)+[|x|]
    • 若运算位=0,则(ACC)+0
  3. 每轮加法之后,ACC、MQ的内容统一逻辑右移(无符号数的算数右移)
  4. |y|的数值部分占n位,则(加法、移位)看成一个操作执行n次
  5. 最终将竖线前的所有数抄下来,即为结果的绝对值,替换上符号位正负号(正正得正,负负得正,正负得负),得到xy=-0.10001111,这是真值,可以将其转换为原码 [xy] = 1.10001111
    • 真值->原码:只变符号位,数值位不变

  1. 补码的一位乘法(Booth算法)

  1. 写出[|x|] 、[|-x|] 、[|y|]

  2. 按如上图那样写,其中第二列需写 [|y|]全部+辅助位 ,然后在辅助位前面划条竖线,用辅助位-运算位(竖线后减竖线前)

    • 竖线后 - 竖线前 = 1,(ACC)+[|x|]
    • 竖线后 - 竖线前 = 0,(ACC)+0
    • 竖线后 - 竖线前 = -1,(ACC)+[|-x|]
  3. 每轮加法之后,ACC、MQ的内容统一算数右移(补码的算数右移)

  4. |y|的数值部分占n位,则(加法、移位)看成一个操作执行n次,但是补码乘法运算最后要多加一轮加法(也是看竖线后-竖线前的数字来决定加什么)

  5. 将ACC的全部+MQ的前n个位拼接,得到的即为[xy] = 11.01110001,前面的11即为符号位负,则xy=-0.01110001(真值)


  1. 原码乘法和补码乘法的对比
原码一位乘法补码一位乘法
加法、移位次数n轮加法、n轮移位n+1轮加法、n轮移位
移位逻辑右移算数右移
符号位是否参与符号位不参与运算符号位参与运算
加什么根据MQ的最低位(即运算位)来确定加什么根据MQ的辅助位、最低位来确定加什么

2.4.8、除法运算(没时间不用看)

  1. 原码除法:恢复余数法:符号位单独处理——符号位 = xS⊕yS,数值位取绝对值进行除法计算

  1. 写出[|x|] 、[|y|]、[|y|] 、[-|y|]
  2. 按如上图那样写,[|x|]+[-|y|] ,得到新余数
    • 若符号位为1,则商0,并且 新余数+[|y|] 恢复原余数,并将余数逻辑左移
    • 若符号位为0,则商1,并将余数逻辑左移
  3. 数值位有n位,则逻辑左移n次,但是最后需要多商一次,所以商n+1次

  1. 原码除法:加减交替法(不恢复余数法)

  1. 写出[|x|] 、[|y|]、[|y|] 、[-|y|]
  2. 按如上图那样写,[|x|]+[-|y|] ,得到新余数
    • 若符号位=1,即若新余数为负,直接商0,并将 (ACC和MQ**[即新余数和商]**逻辑左移)+[|y|] = 余数
    • 若符号位=0,即若新余数为正,直接商1,并将 (ACC和MQ**[即新余数和商]**逻辑左移)+[|-y|] = 余数
  3. 如果最后一步得到的余数是负值,则需商0并且需要再进行一次加法得到正确的余数。所以加减交替法中加减的次数可能是n+1次,也可能是n+2次,但逻辑左移只需要n次

总结:

  • 在原码的加减交替法中,若余数为负,则直接商0,让余数左移一位再加上除数的绝对值的补码,得到下一个余数
  • 若余数为正,则商1,让余数左移一位再减去除数的绝对值的补码,得到下一个余数

恢复余数法和加减交替法:

  • 恢复余数法:当余数为负时商0并加上除数的绝对值的补码,再左移,再加上除数绝对值的负值的补码
  • 加减交替法:当余数为负时商0并左移,再加上除数的绝对值的补码

  1. 补码的除法运算:符号位参与运算,被除数/余数、除数采用双符号位

  1. 写出[x] 、[y] 、[-y] 注意写的并不是绝对值的补码

  2. 按如上图那样写,根据 x 和 y 是同号还是异号来判断:

    • 若x 和 y 同号,则 [x] + [-y] = 新余数
    • 若x 和 y 异号,则 [x] + [y] = 新余数
  3. 根据第二步得到的新余数来判断商

    • 若新余数和 y 同号,则商1,并 (ACC和MQ**[即新余数和商]**逻辑左移) + [-y] = 新余数
    • 若新余数和 y 异号,则商0,并 (ACC和MQ**[即新余数和商]**逻辑左移) + [y] = 新余数
    • 重复n次
  4. 最后一步得到的新余数和y不管同号还是异号,我们都恒让商的末位置为1

  5. 则[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×ME,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的分类: