计算机组成原理笔记:第二章(白中英版)

《计算机组成原理》第五版(唐朔飞考研版) 全书知识梳理 写在前面: 恰逢期末复习,用了几天时间结合老师勾画的重点以及课件教材等,将全书重要内容做了个大整合。一方面便于自己复习记忆,另一方面po出来让更多需要的人也可以做个参考。 同类梳理: 《数据库系统概论》第五版(王珊版)全书知识梳理 《计算机组成原理》第五版(唐朔飞考研版) 全书知识梳理 《数据结构》C语言版 (清华严... 阅读详情

数据与文字的表示方法

数据格式

在计算机中对数据进行表示实际上使用计算机中的高低电平对现实中的数据进行表示,例如如果想表示现实中的自然数,我们知道计算机中的数据是用二进制来表示的,每一个位表示一个二进制位,计算机能够表示的最大数字取决于计算机的容量,但无论如何计算机的容量是有限的,用有限模拟无限这是不可能的,如果要表示的数据是整数,这些存储空间表示的数字一定在一个有限的范围中,在表示实数时也是同理,因为有限不能表示无限所以在表示实数的时候存在精度问题。
所以在计算机表示数的时候要考虑下面几个因素:

  1. 要表示数的类型
  2. 可能的数值范围
  3. 数值精确度
  4. 数据存储和处理所需要的硬件代价
    计算机中常用的数据表示有两种,一种是定点格式(小数点的位置固定),另一种是浮点格式(小数点的位置可以浮动)

定点格式

因为小数点的位置固定不变,所以就不需要在对小数点有额外的关注,小数点的位置固定在哪一位都可以。
例如

…………整数第一位小数点后第一位……

假设将小数点固定在第三位上,那么小数点之后的位数就固定了,在表示数字的时候小数部分按照小数部分的转化规则来,整数部分按照整数部分的转化规则来就行
例如

11000101

此数表示的是
1 ∗ 2 4 + 1 ∗ 2 3 + 1 ∗ 2 − 1 + 1 ∗ 2 − 3 = 16 + 8 + 0.5 + 0.125 = 24.625 1*2^4+1*2^3+1*2^{-1}+1*2^{-3} = 16+8+0.5+0.125=24.625 1∗24+1∗23+1∗2−1+1∗2−3=16+8+0.5+0.125=24.625
可以看出整个数字的能够表示的最小精度为 2 − 3 2^{-3} 2−3因为你可以在任何位置进行数字的增加,但是最小的增加一定是 2 − 3 2^{-3} 2−3的整数倍,所以可以看出来定点数的精度是固定的。
通过将小数点固定在最右侧可以表示纯整数,通过将小数点固定在最左侧可以表示纯小数。

浮点格式

在我们常用的科学计数法中,我们会将下面的数进行转换成更简单的表示方法,如
1652000000 301200000000000000 1652000000\\ 301200000000000000 1652000000301200000000000000
我们在科学计数法中是可以表示为
1.652 ∗ 1 0 9 3.012 ∗ 1 0 17 1.652*10^9\\ 3.012*10^{17} 1.652∗1093.012∗1017
我们可以看到在上面的例子中可以看到尽管两个数的大小相差甚远,但是通过化成科学计数法的形式,变成了一个数乘于一个指数的形式,而且表示起来更加的简单,在计算机中浮点形式的数字就是基于这种表示的方法进行表示的。
将一个数字的有效数字和数的范围在计算机的一个存储单元中分别进行表示,这种把数的范围和精度分别表示的方法,相当于数的小数点位置随比例因子的不同而在一定范围内可以自由浮动,所以称之为浮点表示法。
在计算机中都按照二进制进行表示,所以数字要化成 y ∗ 2 x y * 2^{x} y∗2x这种形式其中y是一个二进制数称为尾数,x也是一个二进制数称为阶码。
所以一个浮点数组成部分如下:

阶符(阶码的符号)阶码数符(数的符号)尾数

十进制数串的表示方法

字符串形式

每一个字节存放一个十进制的数位或符号位,在主存中,这样的一个十进制数占用连续的多字节,故为了指明这样一个数,需要给出该数在主存中的起始地址和串的长度。

压缩的十进制数串形式

因为1个字节表示八个二进制位,而一个十进制位需要四个二进制位就能进行表示,因此可以在一个字节中存放两个十进制的数位,这种形式比字符串形式的存储方式节省存储空间,又便于直接完成十进制数的算术运算,是较为理想的方法。
与字符串表示形式类似,要知名一个压缩的十进制数串,也得给出它在主存中的首地址和数字位个数。

数的机器码表示

在计算机中要对数据进行运算,对数据运算如何综合考虑数据的表示形式与各种运算的关系,就产生了各种数的表示方法,如原码、补码、反码、移码。为了区别一般书写表示的数和机器中这些编码表示的数将前者称为真值,后者称为机器码。

原码表示法

若定点整数的原码形式为 x n x n − 1 x n − 2 . . . x 1 x 0 x_nx_{n-1}x_{n-2}...x_{1}x_{0} xn​xn−1​xn−2​...x1​x0​(注 x n x_n xn​为符号位)则原码表示的定义为
[ x ] 原 = { x 0 ≤ x < 2 n 2 n − x = 2 n + ∣ x ∣ − 2 n < x ≤ 0 [x]_{原}=\begin{cases}x&&0\leq x<2^n\\ 2^n-x = 2^n + |x| && -2^n<x\leq 0 \end{cases} [x]原​={x2n−x=2n+∣x∣​​0≤x<2n−2n<x≤0​
上面定义的意思就是如果一个数的真值大于等于0则在机器码中的表示直接用真值表示即可,如果一个数的真值小于等于0需要用 2 n + ∣ x ∣ 2^n + |x| 2n+∣x∣表示,即在将真值转化为绝对值之后表示,然后在最高位取1进行表示。
例如:
真值:+1001,则 [ x ] 原 = 01001 [x]_{原}=01001 [x]原​=01001
真值:-1001,则 [ x ] 原 = 11001 [x]_{原}=11001 [x]原​=11001
在原码表示法中我们易于发现对于0这个数的表示似乎有+0和-0之分,因为0按照定义两个表示都可以。
在原码表示法中加法运算复杂,所以人们提出了补码表示方法

补码表示方法

在补码表示法中人们利用了循环的性质,利用取余操作,人们可以实现数的循环,比如下式在取余运算中是成立的
− 3 = + 9 ( m o d 12 ) -3 = +9(mod 12) −3=+9(mod12)
也就是说在取模的概念下-3和9是等价的,如果我们用8加上-3,理应得到一个5,但是如果我们使用8+9然后对12进行取模我们也会得到9,也就是说在取模的概念下可以将减法转换为加法。
在取模的概念下一旦超出模的范围就会被自动丢掉,这与计算机中的数据表示天然契合,在计算机中一旦超出最高位,超出的部分就会被丢掉。
若定点整数的原码形式为 x n x n − 1 x n − 2 . . . x 1 x 0 x_nx_{n-1}x_{n-2}...x_{1}x_{0} xn​xn−1​xn−2​...x1​x0​(注 x n x_n xn​为符号位),则补码表示的定义为:
[ x ] 补 = { x 0 ≤ x < 2 n 2 n + 1 + x = 2 n + 1 − ∣ x ∣ − 2 n ≤ x ≤ 0 [x]_{补}=\begin{cases} x && 0\leq x<2^n\\ 2^{n+1} + x = 2 ^{n+1} -|x|&&-2^n\leq x\leq 0 \end{cases} [x]补​={x2n+1+x=2n+1−∣x∣​​0≤x<2n−2n≤x≤0​
这个定义的意思是,一个数的真值大于等于0,在补码表示中可以直接使用真进行表示,对高位补0即可。对于一个数的真值小于等于0则可以使用 2 n + 1 + x 2^{n+1}+x 2n+1+x进行表示,这是因为对于n+1位二进制数,最大可以表示的数为 2 n + 1 2^{n+1} 2n+1(这是模数)所以负数按照规则要转换为对应的补码形式需要加上一个模数。这是同余式的性质
利用补码进行表示的好处是在计算机中进行运算时,减法转换成为加法进行,在计算机中进行实现比较方便。
但是按照定义来说将负数转换为补码仍然需要做减法,为此可以通过反码来解决。

通过原码表示法编程补码表示法的方法

在定点数的反码表示法中,正数的机器码仍然等于其真值,而负数的符号位为1,将原码的每一位求反得到反码,反码的符号位不变,数值位最低位加1,得到反码。

移码表示法

移码通常用于浮点数的阶码的表示,由于,移码的传统定义是
[ e ] 移 = 2 k + e     ≤ e ≤ [e]_{移} = 2^k + e \ \ \ \leq e\leq [e]移​=2k+e   ≤e≤
也就是说对于整个数的表示增加了 2 k 2^k 2k这相当于在数轴上进行了移动(增加了一个固定的偏移量),因此称为移码

浮点数的机器表示

上面我们已经讨论过了浮点表示,现在我们来讨论浮点数在计算机内部如何表示,现在计算机都采用统一的IEEE754标准中的格式表示浮点数,上文中我说

阶符(阶码的符号)阶码数符(数的符号)尾数

在IEEE754标准中使用移码来表示阶码,因此32位短浮点数可以看作下面的格式进行保存

s(符号,1位)阶码(移码表示,8位)尾数(23位)

在IEEE754标准中,一个规格化的32位浮点数x的真值表示为
x = ( − 1 ) s ∗ ( 1. M ) ∗ 2 E − 127 x = (-1)^s*(1.M)*2^{E-127} x=(−1)s∗(1.M)∗2E−127
因为你在存储的时候增加127进行存储的,在进行解码的时候应该减去127进行解码。在尾数部分,由于规格化的浮点数的尾数域最左位总为1,因此这一位无需存储。
对于32位浮点数N,IEEE754定义:

  1. 若E=255且M<>0,则N=NaN。符号NaN表示无定义数据
  2. 若E=255且M=0,则N= ( − 1 ) s ∞ (-1)^s\infty (−1)s∞,当阶码全为1时且尾数M为全0时,表示的真值N为无穷大,结合符号位S为0或1,有 + ∞ +\infty +∞ − ∞ -\infty −∞之分
  3. 若E=0且M=0,则N= ( − 1 ) s 0 (-1)^s0 (−1)s0当阶码全为0且尾数全为0时表示的真值N为零(称为机器0),结合符号位S为0或1,有正零和负零之分。
    因为阶码-127被表示正负0,阶码128被表示正负 ∞ \infty ∞因阶码的范围为[-126,127]
  4. 若 0 < E < 255 0<E<255 0<E<255则 N = ( − 1 ) s ∗ ( 1. M ) ∗ 2 E − 127 N=(-1)^s*(1.M)*2^{E-127} N=(−1)s∗(1.M)∗2E−127(规格化数)
  5. 若E=0且M<>0,则 N = ( − 1 ) s ∗ ( 0. M ) ∗ 2 − 126 N=(-1)^s*(0.M)*2^{-126} N=(−1)s∗(0.M)∗2−126(非规格化数)

上面是一些规定记住就行了。

字符与字符串的表示方法

对于文字、字母、符号等在计算机中都需要转换为二进制格式代码,也就是字符信息用数据表示,称为符号数据。
目前国际上普遍采用的一种字符系统是七单位的IRA码。其美国版称为ASCII码,包含10个10进制数码,26个英文字母和一定数量的专用符号,总共128个元素,因此二进制编码需要7位,加上一个偶校验位,共八位,刚好一字节。

汉字的表示方法

汉字的输入编码

数字编码

常用的国标区位码,用数字串代表一个汉字输入。区位码是将国家标准局公布的6763个两极汉字分为94个区,每个区分为94位,把汉字表示成为二维数组,a[区码][位码]给出区码和位码可以唯一表示一个汉字。
优点:无重码、且输入码与内部码的转换比较方便
缺点:代码难以记忆

拼音码

以汉语拼音为基础的输入方法。
优点:易于掌握
缺点:汉字同音字过多,输入重码率很高,输入速度易受同音字的影响

字形码

把汉字的笔画部件用字母或数字进行编码,按笔画的顺序依次输入就能表示一个汉字。

汉字内码

汉字内码是用于汉字信息的存储、交换、检索等操作的机内代码,一般采用2字节进行表示,有些系统中字节的最高位用于奇偶校验位,这种情况下用3字节表示汉字内码

汉字字模码

字模码是用点阵表示的汉字字形代码,他是汉字的输出形式。

三种编码的总结

汉字的输入编码、汉字内码、字模码是计算机中用于输入、内部处理、输出三种不同用途的编码。

校验码

为了防止数据在传送过程中受到干扰而造成破坏,需要检测错误甚至纠正错误。通常使用的方法是,在每个字上添加一些校验位,用来确定字中出现错误的位置。

检错码

最常用的检错码是采用一位校验位的奇校验或偶校验,设X=( x 0 x 1 . . . x n − 1 x_0x_1...x_{n-1} x0​x1​...xn−1​)是一个n位字,则奇校验位C’定义为C’=( x 0 ⊕ x 1 ⊕ . . . ⊕ x n − 1 x_0\oplus x_1\oplus ... \oplus x_{n-1} x0​⊕x1​⊕...⊕xn−1​)
只有当X中包含奇数个1的时候才能和四C’=1即C=0。
同理偶校验位的定义为
C=( x 0 ⊕ x 1 ⊕ . . . ⊕ x n − 1 x_0\oplus x_1\oplus ... \oplus x_{n-1} x0​⊕x1​⊕...⊕xn−1​)
当X中包含有偶数个1的时候就会C=0

检错码是如何发挥作用的

首先假设一个字要进行传送,这个字为X=( x 0 x 1 . . . x n − 1 x_0x_1...x_{n-1} x0​x1​...xn−1​),在传输之前首先计算校验码C计算出之后将( x 0 x 1 . . . x n − 1 C x_0x_1...x_{n-1}C x0​x1​...xn−1​C)进行传送,然后接受端收到( x 0 ′ x 1 ′ . . . x n − 1 ′ C ′ x'_0x'_1...x'_{n-1}C' x0′​x1′​...xn−1′​C′)之后进行验证,F= x 0 ′ ⊕ x 1 ′ ⊕ . . . ⊕ x n − 1 ′ ⊕ C ′ x'_0\oplus x'_1\oplus ... \oplus x'_{n-1} \oplus C' x0′​⊕x1′​⊕...⊕xn−1′​⊕C′
假设( x 0 x 1 . . . x n − 1 x_0x_1...x_{n-1} x0​x1​...xn−1​)要是存在一位(注意是一位)错误且C传送无误那么在F公式中 x 0 ′ ⊕ x 1 ′ ⊕ . . . ⊕ x n − 1 ′ x'_0\oplus x'_1\oplus ... \oplus x'_{n-1} x0′​⊕x1′​⊕...⊕xn−1′​计算出来的就与C’恰好相反,这会导致计算出来的结果为1,即F=1,表示传送出错,F=0表示传送正确

定点加法、减法运算

补码加法

补码加法的公式是:
[ x ] 补 + [ y ] 补 = [ x + y ] 补 [x]_补+[y]_补=[x+y]_补 [x]补​+[y]补​=[x+y]补​
即两个数的补码相加等于目标数的补码。
证明过程如下:

  1. 假设两个正数进行相加,则有
    [ x ] 补 = x , [ y ] 补 = y [x]_补=x,[y]_补=y [x]补​=x,[y]补​=y
    [ x ] 补 + [ y ] 补 = x + y     ( m o d    2 n + 1 ) [x]_补 + [y]_补 = x+y\ \ \ (mod \ \ 2^{n+1}) [x]补​+[y]补​=x+y   (mod  2n+1)
    因为正数加正数得到的一定是正数,正数的补码等于它本身,所以得到的结果 x + y x+y x+y是 [ x + y ] 补 [x+y]_补 [x+y]补​
  2. 假设一个正数和一个负数进行相加,则有
    [ x ] 补 = x , [ y ] 补 = y + 2 n + 1 [x]_补=x,[y]_补=y+2^{n+1} [x]补​=x,[y]补​=y+2n+1
    [ x ] 补 + [ y ] 补 = 2 n + 1 + x + y = 2 n + 1 + ( x + y )      ( m o d    2 n + 1 ) [x]_补 + [y]_补 = 2^{n+1}+x+y = 2^{n+1} + (x+y) \ \ \ \ (mod \ \ 2^{n+1}) [x]补​+[y]补​=2n+1+x+y=2n+1+(x+y)    (mod  2n+1)
    正数和负数相加有三种可能0,正数,负数
    假设结果为0按照补码的定义因为在取模的情况下 2 n + 1 2^{n+1} 2n+1不影响结果可以去掉,上式得到的 2 n + 1 + ( x + y )      ( m o d    2 n + 1 ) 2^{n+1} + (x+y) \ \ \ \ (mod \ \ 2^{n+1}) 2n+1+(x+y)    (mod  2n+1)等于 x + y x+y x+y而0的补码等于其本身,
    如果结果为正数分析同0的情况。
    如果结果为负数得到的 2 n + 1 + ( x + y )      ( m o d    2 n + 1 ) 2^{n+1} + (x+y) \ \ \ \ (mod \ \ 2^{n+1}) 2n+1+(x+y)    (mod  2n+1)就是负数 x + y x+y x+y的补码,所以在一正一负的情况下相加仍然成立
  3. 假设两个负数进行相加,则有
    [ x ] 补 = x + 2 n + 1 , [ y ] 补 = y + 2 n + 1 [x]_补=x+2^{n+1},[y]_补=y+2^{n+1} [x]补​=x+2n+1,[y]补​=y+2n+1
    [ x ] 补 + [ y ] 补 = 2 n + 1 + x + 2 n + 1 + y = 2 n + 1 + ( 2 n + 1 + ( x + y ) )      ( m o d    2 n + 1 ) [x]_补 + [y]_补 = 2^{n+1}+x+2^{n+1}+y = 2^{n+1}+(2^{n+1} + (x+y) )\ \ \ \ (mod \ \ 2^{n+1}) [x]补​+[y]补​=2n+1+x+2n+1+y=2n+1+(2n+1+(x+y))    (mod  2n+1)
    可以对结果式进一步化简,因为对 2 n + 1 2^{n+1} 2n+1进行取模,所以结果可以变为 2 n + 1 + ( x + y )      ( m o d    2 n + 1 ) 2^{n+1} + (x+y) \ \ \ \ (mod \ \ 2^{n+1}) 2n+1+(x+y)    (mod  2n+1)
    又因为负数加负数一定是负数,所以 2 n + 1 + ( x + y )      ( m o d    2 n + 1 ) 2^{n+1} + (x+y) \ \ \ \ (mod \ \ 2^{n+1}) 2n+1+(x+y)    (mod  2n+1)按照补码的定义就是负数 x + y x+y x+y的补码

证毕。

补码减法

对于补码的减法如果两个数补码相减等于目标数的补码那么就能很方便的进行运算,即 [ x − y ] 补 = [ x ] 补 − [ y ] 补 [x-y]_补=[x]_补-[y]_补 [x−y]补​=[x]补​−[y]补​
同时按照补码加法的性质有 [ x − y ] 补 = [ x ] 补 + [ − y ] 补 [x-y]_补=[x]_补+[-y]_补 [x−y]补​=[x]补​+[−y]补​,所以如果补码减法成立的话应该符合下面的补码减法的公式:
[ x − y ] 补 = [ x ] 补 − [ y ] 补 = [ x ] 补 + [ − y ] 补 [x-y]_补=[x]_补-[y]_补 = [x]_补+[-y]_补 [x−y]补​=[x]补​−[y]补​=[x]补​+[−y]补​
证明过程如下:
上式要想成立只需证明 [ − y ] 补 = − [ y ] 补 [-y]_补=-[y]_补 [−y]补​=−[y]补​即可
首先利用前面证明过的补码加法运算我们知道存在下式成立
[ x − y ] 补 = [ x + ( − y ) ] 补 = [ x ] 补 + [ − y ] 补 [x-y]_补 = [x+(-y)]_补 = [x]_补 + [-y]_补 [x−y]补​=[x+(−y)]补​=[x]补​+[−y]补​
[ x + y ] 补 = [ x ] 补 + [ y ] 补 [x+y]_补 = [x]_补 + [y]_补 [x+y]补​=[x]补​+[y]补​
两式相加可得
[ x − y ] 补 + [ x + y ] 补 = [ x ] 补 + [ − y ] 补 + [ x ] 补 + [ y ] 补 = 2 [ x ] 补 + [ − y ] 补 + [ y ] 补 [x-y]_补 + [x+y]_补 = [x]_补 + [-y]_补 + [x]_补 + [y]_补 = 2[x]_补 + [-y]_补+ [y]_补 [x−y]补​+[x+y]补​=[x]补​+[−y]补​+[x]补​+[y]补​=2[x]补​+[−y]补​+[y]补​
前面的 [ x − y ] 补 + [ x + y ] 补 = [ x − y + x + y ] 补 = [ 2 x ] 补 = 2 [ x ] 补 [x-y]_补 + [x+y]_补=[x-y+x+y]_补=[2x]_补 = 2[x]_补 [x−y]补​+[x+y]补​=[x−y+x+y]补​=[2x]补​=2[x]补​
因此上式 [ x − y ] 补 + [ x + y ] 补 = 2 [ x ] 补 + [ − y ] 补 + [ y ] 补 [x-y]_补 + [x+y]_补 = 2[x]_补 + [-y]_补+ [y]_补 [x−y]补​+[x+y]补​=2[x]补​+[−y]补​+[y]补​将$2[x]_补 移项之后得 移项之后得 移项之后得[-y]_补+ [y]_补=0 即 即 即[-y]_补=- [y]_补$
证毕。

溢出的概念与检测方法

为什么要检测溢出呢?在机器中执行两个数的运算的时候,假设都是32位二进制数进行运算得到的结果可能超过了最大的值32位,这种现象显然是错误的,所以出现溢出时代表结果不正确,所以运算其必须要能够检测溢出。

正溢和负溢

两个正数相加,解诂大于机器字长所能表示的最大正数,称为正溢。
两个负数相加,结果小于机器所能表示的最小负数,称为负溢。

检测方法

双符号位法

采用双符号位办法进行检测,这是因为在采用双符号位的时候相当于将整个数的范围加大了一倍,如果产生溢出的话只可能有一位的溢出,这样就会造成双符号位中两个符号不同,即出现01,或者10这种情况,这就是发生了一处,换句话说双符号位中两个符号其中一个是原始符号备份,另一个是运算结果的符号,如果这两个不同就说明符号位被改变,这就会造成溢出。
01表示正溢
10表示负溢

单符号位法

当最高有效位产生进位而符号位无进位时产生正溢,当最高有效位无进位而符号位有进位时,产生负溢

基本的二进制加法/减法器逻辑结构图

减法可以按照补码化成加法操作,所以只需要加法就行了,对于加法运算其可以参考这一篇文章加法运算器

定点乘法运算

在运算中我们知道同号相乘肯定得到正号,异号相乘肯定得到符号,将符号位和结果符号位画出表来:

数1符号位数2符号位结果符号位
000
011
101
110

使用逻辑表达式进行表达的话
C = A ′ B + A B ′ C = A'B + AB' C=A′B+AB′
这是 C = A ⊕ B C = A\oplus B C=A⊕B
也就是说结果的符号由两个数的符号位进行异或操作来决定。
结果的数值部分则是两个数相乘之积。
乘法则可以按照如下规则进行
         1101 ∗        1011 _ _ _ _ _ _ _ _ _ _ _ _          1101        1101      0000    1101 _ _ _ _ _ _ _ _ _ _ _ _ 10001111 \ \ \ \ \ \ \ \ 1101 \\ *\ \ \ \ \ \ 1011 \\ \_\_\_\_\_\_\_\_\_\_\_\_ \\ \ \ \ \ \ \ \ \ 1101 \\ \ \ \ \ \ \ 1101\\ \ \ \ \ 0000\\ \ \ 1101\\ \_\_\_\_\_\_\_\_\_\_\_\_ \\10001111         1101∗      1011____________        1101      1101    0000  1101____________10001111
在预算的过程中我们可以将第一行1101看作y中最右侧的1乘上x得到的结果,第二行的1101看作y中右侧第二个1成上x的右移一位的结果,第三行的0000可以看作y中的0乘上x的右移两位得到的结果,最后一个1101可以看作y中最左侧的1乘上x的右移三位得到的结果。其实补充完整应为:
         1101 ∗        1011 _ _ _ _ _ _ _ _ _ _ _ _          1101        11010      000000    1101000 _ _ _ _ _ _ _ _ _ _ _ _ 10001111 \ \ \ \ \ \ \ \ 1101 \\ *\ \ \ \ \ \ 1011 \\ \_\_\_\_\_\_\_\_\_\_\_\_ \\ \ \ \ \ \ \ \ \ 1101 \\ \ \ \ \ \ \ 11010\\ \ \ \ \ 000000\\ \ \ 1101000\\ \_\_\_\_\_\_\_\_\_\_\_\_ \\10001111         1101∗      1011____________        1101      11010    000000  1101000____________10001111

串行乘法器

串行乘法器分为下面几部分组成,被乘数寄存器、乘数寄存器、累加寄存器、移位寄存器
过程:
首先检测乘数的最低位,如果乘数最低位为1将被乘数的与累加寄存器中的数据进行加和,然后进行移位操作,重复上述流程,直到的得出结果。
但是这种方法时间效率太慢,目前串行乘法器已经被淘汰,现在随着技术的发展,出现了各种形式的高速流水式阵列乘法器。

流水式阵列乘法器

对于流水式阵列乘法器它的工作原理如表所示:
首先对于两个数相乘可以得到下面的一张表

a 3 a_3 a3​ a 2 a_2 a2​ a 1 a_1 a1​ a 0 a_0 a0​
b 3 b_3 b3​ b 2 b_2 b2​ b 1 b_1 b1​ b 0 b_0 b0​
a 3 b 0 a_3b_0 a3​b0​ a 2 b 0 a_2b_0 a2​b0​ a 1 b 0 a_1b_0 a1​b0​ a 0 b 0 a_0b_0 a0​b0​
a 3 b 1 a_3b_1 a3​b1​ a 2 b 1 a_2b_1 a2​b1​ a 1 b 1 a_1b_1 a1​b1​ a 0 b 1 a_0b_1 a0​b1​
a 3 b 2 a_3b_2 a3​b2​ a 2 b 2 a_2b_2 a2​b2​ a 1 b 2 a_1b_2 a1​b2​ a 0 b 2 a_0b_2 a0​b2​
a 3 b 3 a_3b_3 a3​b3​ a 2 b 3 a_2b_3 a2​b3​ a 1 b 3 a_1b_3 a1​b3​ a 0 b 3 a_0b_3 a0​b3​
R 7 R_7 R7​ R 6 R_6 R6​ R 5 R_5 R5​ R 4 R_4 R4​ R 3 R_3 R3​ R 2 R_2 R2​ R 1 R_1 R1​ R 0 R_0 R0​

在这样的一张表中我们会发现 a x b y a_xb_y ax​by​这样的数一共有 m ∗ n m*n m∗n个,而结果序列 R 7 R 6 . . . R 1 R 0 R_7R_6...R_1R_0 R7​R6​...R1​R0​可以通过这 m ∗ n m*n m∗n个进行得到,这 m ∗ n m*n m∗n个数可以并行得到,因此时间花销主要在执行加和得到 R 7 R 6 . . . R 1 R 0 R_7R_6...R_1R_0 R7​R6​...R1​R0​这个数,在这一部分中得到 R 7 R 6 . . . R 1 R 0 R_7R_6...R_1R_0 R7​R6​...R1​R0​的逻辑表达式为:
R 7 = C R 6 R_7 = C_{R_6} R7​=CR6​​
⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ······ ⋅⋅⋅⋅⋅⋅
R 2 = a 2 b 0 ⊕ a 1 b 1 ⊕ a 0 b 2 ⊕ C R 1 R_2=a_2b_0\oplus a_1b_1 \oplus a_0b_2 \oplus C_{R1} R2​=a2​b0​⊕a1​b1​⊕a0​b2​⊕CR1​
R 1 = a 1 b 0 ⊕ a 0 b 1 ⊕ C R 0 R_1 = a_1b_0 \oplus a_0b_1 \oplus C_{R_0} R1​=a1​b0​⊕a0​b1​⊕CR0​​
R 0 = a 0 b 0 R_0 = a_0b_0 R0​=a0​b0​
其中 C R x C_{R_x} CRx​​表示 R x R_x Rx​产生的进位
上面的时间开销主要在于进位产生的延时

王道计算机组成原理:完整笔记 基于著名书籍和自我学习得出的王道计算机组成原理理论知识 阅读详情

相关推荐

北邮 计算机组成原理

一、前言 本文总结 BUPT 计算机学院《计算机组成原理》的学习资料,希望能帮到学弟学妹,打好基础。 计算机组成原理是计算机专业考研的必考科目之一,4学分。先修学科是数字逻辑和计算机系统基础,这两门课学好了,对计算机组成才会有更深的了解。 这门课笔记不算太多,主要是理解,还有好多概念性的东西需要记忆,重点也比较突出。 二、思维导图 以下是自己总结的 Xmind 思维导图,可以帮助梳理知识脉络,需要自取。 链接:https://pan.baidu.com/s/1Or44yWu4TJGtL6_VlLGwog 提

weixin_44413191的博客 8604

计算机组成原理

第1章:计算机系统概论 1、计算机系统由哪两部分组成?计算机系统性能取决于什么?     计算机系统是由“硬件”和“软件”组成。衡量一台计算机性能的优劣是根据多项技术指标综合确定的,既包括硬件的各种性能指标,又包括软件的各种功能。 1)计算机系统由硬件和软件两部分组成。 2)计算机系统性能由硬件和软件共同决定。 2、计算机系统5层层次结构从下到上由哪五层组成?哪些是物理机,哪些是

Adjerrekaf的博客 5万+

计算机组成原理(白中英) 第四章 课后题答案

解:设操作码位数为x,因为指令系统共有70条指令,则x需满足 2^x≥70,解得 x≥7。 op 为操作码 双操作数:A_1 和 A_2 存放两操作数地址,A_1存放结果地址 op(7bit) 空(1bit) A_1 (12bit) A_2 (12bit) 单操作数:A_1 存放操作数地址和结果地址 op(7bit) A_1 (25bit) 无操作数:不存放操作数相关信息 op(7bit) —(25bit) 解:指令中有源地址和目的地址,为双地址指令,源地址和目标地址同时给出操作数的位置,并将运算结果存.

weixin_44413191的博客 1万+

计算机组成原理--白中英版 全部知识点

这里的知识点是根据我们学校的期末考试准备的,大部分也就是书上的内容和ppt上的内容,我这里是把所有的知识点做了一个整理

weixin_51406400的博客 1372

计算机组成原理-白中英课后习题详解

本文还有配套的精品资源,点击获取 简介:《计算机组成原理》是计算机科学与技术专业的核心课程,涵盖了计算机硬件系统的组成、工作原理和数据处理方式。本资料提供了白中英教授教材的课后习题解答,对学习者深入理解计算机基本组成、指令系统、数据表示、运算器、控制器、存储层次结构和输入/输出系统等概念大有裨益。通过这些习题的练习,学生能更好地掌握计算机硬件原理,并提升应用能力,适用于考试...

weixin_32306683的博客 1664

计算机组成原理(白中英第五版)

计算机组成原理(白中英第五版)完整版课件,从第一章到第八章,进行了细化分解 计算机组成原理(白中英第五版)完整版课件,从第一章到第八章,进行了细化分解

计算机组成原理 复习笔记(已完结)

本文参考书是白中英第六版《计算机组成原理》和机械工业出版社《计算机组成》。本文为期末复习参考,非考研,侧重知识点可能有所差异。如有错误烦请指出。

CK_0ff的博客 2万+

计算机组成原理(白中英第五版)完整版课件,从第一章到第八章

计算机组成原理(白中英第五版)完整版课件,从第一章到第八章,进行了细化分解 计算机组成原理(白中英第五版)完整版课件,从第一章到第八章,进行了细化分解

计算机组成原理(白中英&戴志涛版)——终极笔记1️⃣

肥学第一记肥学有话说计算机的硬件五大部件运算器存储器控制器输入和输出设备总线百炼成钢肥学最后说 肥学有话说 小伙伴们大家好呀!???? 我相信点进来的同学多半都是考研或者找工作面试的同学。机组在考研或者面试中的比例还是很大的。小伙伴们要认真学习呀无论是考研还是面试我都祝你们成功。肥学为了帮助大家我也是特意准备了基础知识四件套包括今天的机组,计网,操作系统,数据结构。大家可以关注我我们一起学习。另外呢我个人很建议大家去找我私聊,因为很多知识是这里分享不完的我们可以慢慢交流。好了我们开始学习吧!。 计算机的硬

肥学的博客 2931

计算机组成原理(第5版)白中英-----全部课后习题详细答案

计算机组成原理(第5版)白中英-----全部章节课后习题的答案,答案很详细,也比较准确,而且是pdf格式的,排版比较清晰,看得比较清楚,推荐有需要的同学自行下载

计算机组成原理-白中英-第五版_计算机组成原理_白中英_

计算机组成原理 白中英 第五版带目录,已转化文字

计算机组成原理期末复习整理 白中英版本

这个是在期末考试复习前,自己对整本书的部分复习,参考的资料有王道的视频、课本和老师上课时用到的PPT。 不同学校考试侧重点不同,一下是本学校喜欢的出题点,仅供参考。 选择、填空和判断:这个需要积累,考的很细,多些题目做做,如果时间来不及,就找一些总结,把总结看了后,就去做题,在做题的过程中去记忆。当然,刚开始做题,会有很多不会,这就要去找课本或者上网搜索,要看懂这个题目为什么这么写。 大题部分出题方向: 1.IEEE754计算题,将一个小转化...

qq_47373470的博客 4282

COMSOL模拟CO2驱替CH4:多物理场耦合建模与工程应用详解

在非常规天然气开发与碳封存工程中,多孔介质内的渗流、吸附与岩石变形相互耦合,使得CO2驱替CH4的产能预测和CO2封存评估无法仅靠经验公式完成。以达西定律描述裂隙流动、以扩展Langmuir方程刻画竞争吸附、用应力-吸附-渗透率关系关联煤岩变形,是多物理场耦合数值模拟的核心路径。COMSOL Multiphysics凭借内置渗流、固体力学与组分传递接口,能够将这些机制整合为可参数化扫描的仿真模型,为注气压力、井距、渗透率演化等方案设计提供量化依据。围绕CO2驱替CH4模拟的建模流程、参数取法与结果判读,可形

weixin_29574585的博客 158

白中英 计算机组成原理_白中英《计算机组成原理》(第5版)笔记和课后习题答案详解...

白中英《计算机组成原理》(第5版)笔记和课后习题白中英所著的《计算机组成原理》(第5版,科学出版社)是我国高校采用较多的计算机专业优秀教材,也被众多高校指定为计算机专业考研参考书目。作为该教材的学习辅导书,本书具有以下几个方面的特点:1.整理名校笔记,浓缩内容精华。在参考了国内外名校名师讲授白中英《计算机组成原理》(第5版)的课堂笔记基础上,本书每章的复习笔记部分对该章的重难点进行了整理,同时对重...

weixin_39625305的博客 4420

告别Windows!Oculus Quest 2在Mac M1上的串流实战(scrcpy+SideQuest避坑指南)

本文为Mac M1用户提供了Oculus Quest 2在macOS上实现高清低延迟串流的实战指南。通过使用开源工具scrcpy和SideQuest,绕开官方限制,详细讲解了从环境准备、无线调试到画质与延迟优化的完整步骤,重点解决了Apple Silicon芯片Mac的连接与性能问题,助你告别Windows依赖。

weixin_29224309的博客 306

海康工业相机LabVIEW二次开发实战——参数配置优化与图像高效存储

本文详细介绍了海康工业相机在LabVIEW平台上的二次开发实战,重点解析了相机参数配置的优化方法与图像高效存储策略。通过剖析曝光、增益、触发模式等核心参数的设置逻辑,并结合生产者-消费者设计模式,指导开发者构建稳定、高效的图像采集与异步存储流程,有效提升工业视觉项目的开发效率与系统稳定性。

weixin_29306317的博客 220

计算机组成原理第六版白中英课后习题答案pdf

《计算机组成原理》是计算机科学与技术专业的重要基础课程,由白中英教授编著的第六版教材在行业内广受欢迎。这本教材深入浅出地介绍了计算机系统的基本组成、工作原理以及各部分之间的相互作用,涵盖了从数据表示、运算器设计、存储系统、指令系统到中央处理器(CPU)的结构、输入输出系统等多个核心主题。课后习题是检验学习成果、深化理解的关键环节,因此,提供详尽的课后习题答案对于学习者来说极为重要。

coc_szns的博客 7941

Vue+ECharts-GL 3D地图实战:5层叠加打造炫酷中国地图(附完整代码)

本文详细介绍了如何利用Vue和ECharts-GL构建具有强烈立体感的3D中国地图。通过5层图层的巧妙叠加与样式调校,实现了从背景阴影到交互高光的完整视觉层次,并整合了动态飞线与散点标记。文章提供了完整的代码实现、核心配置解析以及性能优化与视觉调优的实战技巧,帮助开发者快速打造专业级的交互式地图可视化应用。

d6e7f8g9h的博客 649

计算机组成原理白中英作业,计算机组成原理白中英部分作业解答(第二章)

《计算机组成原理白中英部分作业解答(第二章)》由会员分享,可在线阅读,更多相关《计算机组成原理白中英部分作业解答(第二章)(19页珍藏版)》请在人人文库网上搜索。1、2020/7/20,计算机组成原理,1/10,计算机组成原理 第二章作业解答,2020/7/20,计算机组成原理计算机学院,2/10,1、将十进制数(75.34)10转换为8位二进制及八进制、十六进制数 (75.34)10 = (10...

weixin_39653078的博客 1423

STM32+EC800M-CN 4G模块数据透传踩坑实录:从AT指令调试到花生壳内网穿透

本文详细介绍了STM32与移远EC800M-CN 4G模块的数据透传实现过程,包括硬件连接、AT指令调试、TCP连接建立以及花生壳内网穿透配置。通过实战案例和代码示例,帮助开发者快速解决4G通信模块在物联网应用中的常见问题,提升数据传输稳定性。

weixin_42715608的博客 320

基于YOLOv5/v8/v10的垃圾分类识别系统:设计实现与性能优化(附代码+数据集)

做完这个毕设,你已经掌握了从数据准备、模型训练到界面开发的全流程。把模型部署到树莓派上,做个真正的“智能垃圾桶”硬件装置;加入语音提示功能,检测到垃圾后自动语音播报类别;试试融合多个YOLO模型的优势,让分类精度再上一个台阶。按照这个教程一步步做,你的毕设不仅能顺利完成,还能做出很多亮点。要是过程中遇到啥问题,别慌,慢慢琢磨或者咱们一起聊聊,肯定能把这个毕设做成让你满意的作品。

know_F0727的博客 461

计算机组成原理:最详细笔记

前言 参考:《王道计算机组成原理》学习笔记总目录+思维导图 2019 王道考研 计算机组成原理 第一章 计算机系统概述 1.1 计算机发展历程 1.1.1 计算机硬件的发展 计算机系统=硬件+软件 计算机硬件的发展: 第一代计算机:(使用电子管), 第二代计算机:(使用晶体管), 第三代计算机:(使用较小规模的集成), 第四代计算机:(使用较大规模的集成), 已经经历了4代,计算机的速度越来越快,并且体积变得越来越小。 发展趋势:更微型、多用途;更巨型、超高速......

杰之行的博客 54万+

YOLOv11改进 | 损失函数改进篇 | 2024最新高质量的目标检测边界框回归损失Unified-IoU、FocalUIoU、FocalInvUIoU(设置动态epoch参数)

本文给大家带来的改进机制是最近新提出的高质量的目标检测边界框回归损失,其通过动态调整模型对不同质量预测框的关注,优化目标检测中的边界框回归精度。UIoU引入了FocalBox方法,通过缩放预测框与真实框分配权重,并采用了退火策略(引入动态参数epoch),逐渐将模型的注意力从低质量预测框转移到高质量预测框,平衡了训练速度与检测精度。其还有一定的解决样本不平衡问题,同时该损失函数可以和现有的任何边界框回归损失函数进行结合,例如ShapeIoU和其结合可以形成二次创新,它是一种类似于之前的Inner的机制.

Snu77的博客 4583

【免费下载】 计算机组成原理-白中英-电子书

计算机组成原理-白中英-电子书 【下载地址】计算机组成原理-白中英-电子书 计算机组成原理-白中英-电子书 项目地址: https://gitcode.com/Open-source-documentation-tutorial/...

gitblog_06636的博客 3854

手把手教你学simulink(28.2)--四旋翼无人机景示例:基于自抗扰控制(ADRC)的无人机姿态稳定系统

通过上述代码实现,您可以逐步创建和搭建一个基于自抗扰控制的无人机姿态稳定系统。该系统能够实时估计和补偿外部扰动及模型不确定性,确保无人机姿态稳定。自抗扰控制具有较强的鲁棒性和适应性,能够在存在不确定性和扰动的情况下提供快速且精确的控制性能。Simulink提供了强大的建模和仿真工具,使得控制系统工程师能够快速构建复杂的控制算法,并将其应用于实际工程中。无人机动力学建模:建立无人机的六自由度(6-DOF)动力学模型,包括位置、速度、姿态角和角速度。自抗扰控制器设计。

MHD0815的博客 499

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: java考试题20道
下一篇: Graph Guided Transformer论文精读
apprentice_eye
博客等级 码龄6年 1165粉丝 348原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值