Hanwan Space

计组期中复习笔记

计算机组成与体系结构:绪论、数据表示、运算方法与运算器部分。


计算机基础

发展史

  • 第一代:电子管;机器语言。
  • 第二代:晶体管;监控语言、高级语言。
  • 第三代:中小规模集成电路、磁芯存储器;高级语言、分时操作系统。
  • 第四代:大规模与超大规模集成电路、半导体存储器、微处理器;DOS / Windows,Unix / Linux,Mac OS。
  • 第五代:巨大规模集成电路,超大规模、超高速集成电路,多处理器、多核处理器;软件与算法。

基本组成

  • 硬件系统
  • 软件系统
  • 指令体系结构(ISA)

分类

Flynn 分类法。

  • SISD(单指令流单数据流)
  • SIMD
  • MISD
  • MIMD(多指令流多数据流)

加速比

阿姆达尔定律

改进后系统执行时间:Tn=T0(1−fe+fere)T_n=T_0(1-f_e+\frac{f_e}{r_e})

加速比:Sp=11−fe+fereS_p=\frac{1}{1-f_e+\frac{f_e}{r_e}}

​ 多个部件的加速比:Sp=11−∑fe+∑fereS_p=\frac{1}{1-\sum f_e+\sum \frac{f_e}{r_e}}

符号含义
T0T_0改进前系统执行时间
fef_e可改进比例(可改进部分在原执行时间中所占的比例)
rer_e部件加速比(某部件改进后性能提高的比例)

例题

若计算机系统有 3 个部件 a、b、c 是可改进的,它们的部件加速比分别为 30、30、20,部件 a 和 b 在总执行时间中所占的比例分别是 30%、30%。 若要使整个系统的加速比达到 10,则部件 c 在总执行时间中所占的比例应为 ?%

Sp=10S_p=10

∑fe=0.3+0.3+x=0.6+x\sum f_e=0.3+0.3+x=0.6+x

∑fere=0.330+0.330+x20=0.02+x20\sum \frac{f_e}{r_e}=\frac{0.3}{30}+\frac{0.3}{30}+\frac{x}{20}=0.02+\frac{x}{20}

带入公式得:10=11−(0.6+x)+(0.02+x20)10=\frac{1}{1-(0.6+x)+(0.02+\frac{x}{20})}

解得:x=9532≈0.3368x=\frac{95}{32} \approx 0.3368

进制转换

例:97.625 转换为二进制和十六进制。

二进制
二进制

转换结果:1100001.101

十六进制
十六进制

转换结果:61.A

定点数

下述的 nn 均表示编码的位数(含符号位)。

原码

  • 符号位:0 为正,1 为负。

  • 数值位:∣X∣|X|

  • 可表示范围

    • 纯整数:−(2n−1−1)∼+(2n−1−1)-(2^{n-1}-1)\sim +(2^{n-1}-1)
    • 纯小数:−(1−2−(n−1))∼+(1−2−(n−1))-(1-2^{-(n-1)})\sim +(1-2^{-(n-1)})

补码

  • 符号位:0 为正,1 为负。

  • 数值位

    • X≥0X\ge 0:XX
    • X<0X\lt 0:2n+X2^n+X
  • 可表示范围

    • 纯整数:−2n−1∼+(2n−1−1)-2^{n-1}\sim +(2^{n-1}-1)

    • 纯小数:−1∼+(1−2−(n−1))-1\sim +(1-2^{-(n-1)})

  • 负数补码求法:先将 ∣X∣|X| 用原码表示。从右往左找到第一个 1,将这一位左边的位全部取反,这一位及其右边的位保持不变。

  • 补码减法:[X−Y]补=[X]补+[−Y]补=[X]补+[[Y]补]求补\begin{aligned} [X-Y]_\text{补}&=[X]_\text{补}+[-Y]_\text{补} \\ &=[X]_\text{补}+[[Y]_\text{补}]_\text{求补} \end{aligned}

反码

  • 符号位:0 为正,1 为负。
  • 数值位
    • X≥0X\ge 0:XX
    • X<0X\lt 0:∣X∣|X| 按位取反
  • 可表示范围:与原码相同。
  • 负数补码与反码的关系:[X]补=[X]反[X]_\text{补}=[X]_\text{反}的最低位加 1。

移码

  • 符号位:1 为正,0 为负。

  • 数值:[X]移=2n−1+X[X]_\text{移}=2^{n-1}+X

  • 与补码的关系:补码的符号位取反就是移码。

  • 可表示范围:与补码相同。

编码与真值的关系

由此可见,移码可以直接比较大小。

浮点数

二进制的科学计数法。

规格化浮点数

尾数 MM 形式
  • M≥0M\ge 0:[M]补=0.1××⋯×[M]_\text{补}=0.1\times\times\cdots\times
  • M<0M\lt 0:[M]补=1.0××⋯×[M]_\text{补}=1.0\times\times\cdots\times
规格化
  • 左归:每算数左移 1 位,阶码减 1。

  • 右规:每算数右移 1 位,阶码加 1。

IEEE 754 标准

IEEE 754 规格化尾数:1.f,即 1.××⋯×1.\times\times\cdots\times(包含符号位)

尾数×2阶数\text{尾数}\times 2^\text{阶数}

IEEE 754 单精度浮点数
IEEE 754 单精度浮点数

阶码应为阶数的补码符号位取反再减去 1(比标准移码少 1)。

图片勘误:f 为原码。

BCD 码

把十进制数拆成一位位数字来表示,每位使用四位二进制数来表示。

以常用的 8421 码为例,如 49,可拆成 4 和 9,即 0100 和 1001,故 49 的 8421 BCD 码为 01001001。

BCD 码也可以参与运算。

检错与纠错码

海明码距

  • 定义:将两个码字按位异或后 1 的个数。

  • 检错 rr 位:dmind_\text{min} 至少为 r+1r+1。

  • 纠错 rr 位:dmind_\text{min} 至少为 2r+12r+1。

确保具有一位纠错能力

2k≥n+k+12^k\ge n+k+1,其中:nn 为数据长度,kk 为校验位位数。

奇偶校验

  • 奇校验:数据中 1 的个数为奇数时,校验位为 0。
  • 偶校验:数据中 1 的个数为偶数时,校验位为 0。

海明校验码

编码

例:编码 10101110。

校验与纠错

例:给定如下码字:010111010110,判断出错位置,以及纠错后的原始数据。

若无出错,则校验码均通过,此时 H0H1H2H3=0H_0H_1H_2H_3=0。

如果只有校验位出错,则只有一个校验码不通过,此时原数据无需修正。

循环冗余校验码(CRC)

编码

信息:1010110

生成多项式:G(x)=x3+x+1G(x)=x^3+x+1

校验与纠错

若有出错,根据余数值查询出错定位表即可得到出错的位。

定点数的运算

加减运算

补码运算。

溢出及其判断

由于补码表示范围有限,如果计算结果不在范围内,则发生了溢出。

双符号位(变形码)判决

00 表示正,11 表示负。如果运算结果中,两个符号位不一致,则说明发生了溢出。

乘法运算

Booth 法。

X×YX\times Y

Y0Y_0Y−1Y_{-1}操作
00+0,右移一位
11+0,右移一位
01+[X]补+[X]_\text{补},右移一位
10+[−X]补+[-X]_\text{补},右移一位

例:X=−0.1101X=-0.1101,Y=+0.0110Y=+0.0110,求乘积。

[X]补=11.0011[X]_\text{补}=11.0011,[−X]补=00.1101[-X]_\text{补}=00.1101(双符号补码);[Y]补=0.0110[Y]_\text{补}=0.0110(单符号补码)。

得 [X⋅Y]补=1.10110010[X\cdot Y]_\text{补}=1.10110010。

除法运算

原码加减交替法。

∣X∣÷∣Y∣|X|\div|Y|

  • 余数 R≥0R\ge 0,商为 1,余数左移,减 ∣Y∣|Y|(加 [−∣Y∣]补[-|Y|]_\text{补})。
  • 余数 R<0R<0,商为 0,余数右移,加 ∣Y∣|Y|。

表格数值位扩展到 ∣Y∣|Y| 数值位的 2 倍。

例:X=+0.1001110001X=+0.1001110001,Y=−0.10101Y=-0.10101。求 X÷YX\div Y。

∣X∣=0.1001110001|X|=0.1001110001,∣Y∣=0.10101|Y|=0.10101,[−∣Y∣]补=1.01011[-|Y|]_\text{补}=1.01011。

得 [X÷Y]原=1.11101[X\div Y]_\text{原}=1.11101,余数=0.10000×2−5\text{余数}=0.10000\times 2^{-5}。

需要恢复余数的情况

R 符号为负(11),则余数需要加 ∣Y∣|Y|,该操作称为恢复余数。

例:X=−0.1010100000X=-0.1010100000,Y=+0.11011Y=+0.11011,求 X÷YX\div Y。

过程如下(已省略加减交替过程)。

恢复余数的情况
恢复余数的情况

得 余数=1.11000×2−5\text{余数}=1.11000\times 2^{-5}(符号位与被除数一致)。

浮点数的运算

加减运算

  1. 对阶:尾数右移阶码加。
  2. 尾数求和/差。
  3. 运算结果规格化、舍入。

例:X=1116×2−4X=\frac{11}{16}\times 2^{-4},Y=3564×2−3Y=\frac{35}{64}\times 2^{-3},计算 X±YX\pm Y。

X=0.101100×2−4X=0.101100\times 2^{-4},Y=0.100011×2−3Y=0.100011\times 2^{-3}

[X]浮=01100;0.101100[X]_\text{浮}=01100;0.101100,[Y]浮=01101;0.100011[Y]_\text{浮}=01101;0.100011

对阶:[X]浮′=01101;0.010110[X]'_\text{浮}=01101;0.010110,[Y]浮=01101;0.100011[Y]_\text{浮}=01101;0.100011

尾数求和/差

  • 求和 00.010110+00.10001100.111001\begin{array}{ccc} &00.010110 \\ +&00.100011 \\ \hline &00.111001 \end{array}

  • 求差 00.010110−11.01110111.110011\begin{array}{ccc} &00.010110 \\ -&11.011101 \\ \hline &11.110011 \end{array}

规格化:

  • 0.1110010.111001 已经是规格化尾数。[X+Y]浮=01101;0.111001[X+Y]_\text{浮}=01101;0.111001。

  • 1.1100111.110011 需要左归,左移 2 位,阶码减 2。[X−Y]浮=01011;1.001100[X-Y]_\text{浮}=01011;1.001100。

无需进行舍入处理。

乘除运算

  1. 阶码加/减。
  2. 尾数乘/除。
  3. 运算结果规格化、舍入。

  • 计组
© hawa130转载请注明出处
License: CC BY-NC-SA 4.0

上一篇

从零开始的 SwiftUI 之旅

最近算是真正入门了 Swift 这门语言,不过,也仅仅只是入门。
下一篇

Hexo 建站简易教程

中文互联网的现代 Hexo 教程太少啦!
© 2025 Hanwan Space冀ICP备2021001339号-1