计算机组成原理知识总结(二)运算方法和运算器

系列文章目录

计算机组成原理知识总结(一)计算机概论



2.1 数据与文字的表示方法

2.1.1 数据格式

分为定点格式和浮点格式

定点格式

因为不用考虑小数点,所以只能表示纯小数和纯整数

在这里插入图片描述
纯小数小数点在 x n x_n xn x n − 1 x_{n-1} xn1之间,纯整数在 x 0 x_0 x0右边。
小数的范围为: 0 ≤ ∣ x ∣ ≤ 1 − 2 − n 0≤|x|≤1-2^{-n} 0x12n
整数的范围为: 0 ≤ ∣ x ∣ ≤ 2 n − 1 0≤|x|≤2^{n}-1 0x2n1

浮点格式

浮点是有效数字和数的范围分开存储,比如0.9-e3,0.9在一个地方3又在一个地方,这样做的好处是可以存储足够大的数字。
十进制 N = 1 0 E . M N = 10^E.M N=10E.M
二进制 N = 2 e . M N = 2^e.M N=2e.M
M M M是尾数,就是纯小数,E是浮点数的指数,是纯整数

十进制数串表示方法

  1. 字符串形式
  2. 压缩的十进制数串形式,用16进制表示一个数字。

2.1.2 数的机器码表示

由于在机器中涉及数字的运算,还需要考虑到数字的正负符号,所以就衍生出机器码来方便运算。一般叫我们平常看见的数字叫做真值,在机器里方便运算的叫做机器码。

原码表示法

同号相加方便,减法比较难,引出了补码。

[ x ] 原 = { x , 2 n > x ⩾ 0 2 n − x = 2 n + ∣ x ∣ 0 ⩾ x > − 2 n [x]_原=\begin{cases}x, & 2^n>x\geqslant 0\\ 2^n-x=2^n+|x|& 0\geqslant x>-2^n \end{cases} [x]={x,2nx=2n+x2n>x00x>2n

补码表示法

负数用补码表示的时候,可以将减法转换为加法。又因为求负数的补码还是要做减法,所以又引出了反码。
[ x ] 补 = { x , 2 n > x ⩾ 0 2 n + 1 + x = 2 n + 1 − ∣ x ∣ 0 ⩾ x > − 2 n [x]_补=\begin{cases}x, & 2^n>x\geqslant 0\\ 2^{n+1}+x=2^{n+1}-|x|& 0\geqslant x>-2^n \end{cases} [x]={x,2n+1+x=2n+1x2n>x00x>2n

补码和真实值的关系

[ x ] 补 = x n x n − 1 x n − 2 . . . x 1 x 0 [x]_补=x_nx_{n-1}x_{n-2}...x_1x_0 [x]=xnxn1xn2...x1x0
x = − 2 n x n + ∑ i = 0 n − 1 2 i x i x = -2^nx_n + \sum_{i=0}^{n-1}2^ix_i x=2nxn+i=0n12ixi

规则就是,如果是正整数,那么三码都是一样的,如果是负整数,符号位1不变,反码就是原码每个二进制取反,补码就是反码最低位+1。

[ x ] 原 = 01111010        [ x ] 原 = 11111010 [x]_原 = \bold{0}1111010 \ \ \ \ \ \ [x]_原 = \bold{1}1111010 [x]=01111010      [x]=11111010
[ x ] 反 = 01111010        [ x ] 反 = 10000101 [x]_反 = \bold{0}1111010 \ \ \ \ \ \ [x]_反 = \bold{1}0000101 [x]=01111010      [x]=10000101
[ x ] 补 = 01111010        [ x ] 补 = 10000110 [x]_补 = \bold{0}1111010 \ \ \ \ \ \ [x]_补 = \bold{1}0000110 [x]=01111010      [x]=10000110

移码表示法

通常用于表示浮点数的阶码 E E E,在机器中表示一个浮点数时需要给出指数,这个指数用整数形式表示,这个整数叫做阶码,阶码指明了小数点在数据中的位置。
阶码有k位数,假定定点整数移码形式为 e k e k − 1 e k − 2 . . . e 2 e 1 e 0 e_ke_{k-1}e_{k-2}...e_2e_1e_0 ekek1ek2...e2e1e0(最高位为符号位),移码的传统定义是
[ e ] 移 = 2 k + e , 2 k > e ⩾ − 2 k [e]_移 = 2^k+e, 2^k>e\geqslant-2^k [e]=2k+e,2k>e2k
主要是比较大小或者阶操作

利用二进制数,比较十进制数21和-21的大小
答:
x=21,对应的二进制数为+10101,【x】补=0,10101
x=-21,对应的二进制数为-10101,【x】补=1,01011
如果按照补码进行比较,则101011 > 010101,答案错误
x=10101 加上2的5次方 10101+100000=110101
x=-10101加上2的5次方 -10101+100000=001011
所以 110101>001011
移码: [x]移=2的n次方 + x
例如:
x=10100 则在【x】移=25+ x=100000+10100=1,10100
x=-10100 则在【x】移=2
5+ x=100000-10100=0,01100
同一个真值的移码和补码仅相差一个符号位
x=-10100 则在【x】补=1,01100 【x】移=0,01100

移码就是补码符号取反就可以了。

浮点数的机器表示

IEEE754标准中的格式表示浮点数。

请添加图片描述
S是浮点数的符号位。M是尾数,小数点位置放在尾数域最左有效位的右边。E是阶码。一个规格化的32位浮点数x的真值表示为
x = ( − 1 ) S ∗ ( 1. M ) ∗ 2 E − 127 x=(-1)^S*(1.M)*2^{E-127} x=(1)S(1.M)2E127

2.1.3 字符与字符串的表示方法

除了数字外,还有文字语言、英文字母、标点符号等等。ASCII编码。

2.1.4 汉字的输入编码

汉字的输入编码

  • 数字编码
  • 拼音码
  • 字形编码-五笔

汉字内码

用于汉字信息的存储、交换、检索等操作的机内代码,一般采用2字节表示。

汉字字模码

表示汉字字形代码,是汉字的输出形式。

2.1.5 校验码

发送发会在每个字添加一些校验位,用来确定字中出现错误的位置。检错码,奇校验或偶校验。

2.2 定点加法、减法运算

2.2.1 补码加法

[ 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)

2.2.2 补码减法

[ x − y ] 补 = [ x ] 补 − [ y ] 补 = [ x ] 补 + [ − y ] 补     ( m o d   2 n + 1 ) [x-y]_补 = [x]_补-[y]_补=[x]_补+[-y]_补\ \ \ (mod\ 2^{n+1}) [xy]=[x][y]=[x]+[y]   (mod 2n+1)

2.2.3 溢出概念与检测方法

定点整数机器中,数有一个范围,如果运算超出范围,就叫“溢出”。
检测方式

  • 变形补码
  • 单符号位法

2.2.4 基本的二进制加法/减法器

在这里插入图片描述
在这里插入图片描述

2.3 定点乘法运算

人工算法与机器算法的同异性

定点计算中,两个原码表示的相乘的运算规则是:乘积的符号位由两数的符号位按异或运算得到,而乘积的数值部分则是两个正数相乘之积。
但是机器按着人工算法太慢了,得改进。

不带符号的阵列乘法器

在这里插入图片描述

带符号的列阵乘法器

在这里插入图片描述

2.4 定点除法运算

2.4.1 原码除法算法原理

两原码表示的数相除,商的符号由两数的符号按位相加求得,商的数值部分由两数的数值部分相除求得。

2.4.2 并行除法器

可控加法/减法(CAS)单元

在这里插入图片描述

加减交替的阵列除法器

在这里插入图片描述

2.5 定点运算器的组成

2.5.1 逻辑运算

逻辑非运算

求发,按位求它的反

逻辑加运算

按位求它们的“或”,逻辑或

逻辑乘运算

按位求它们的“与”,逻辑与

逻辑异运算

按位求它们的模2和,按位加

2.5.2 多功能算术/逻辑运算单元

基本思想

在这里插入图片描述

逻辑表达式

S 0 、 S 1 、 S 2 、 S 3 S_0、S_1、S_2、S_3 S0S1S2S3分别控制输入 A i 、 B i A_i、B_i AiBi,产生 Y i Y_i Yi X i X_i Xi
X i = S 2 ˉ S 3 ˉ + S 2 ˉ S 3 ( A i ˉ + B i ˉ ) + S 2 S 3 ˉ ( A i ˉ + B i ) + S 2 S 3 A i ˉ X_i=\bar{S_2}\bar{S_3}+\bar{S_2}S_3(\bar{A_i}+\bar{B_i})+S_2\bar{S_3}(\bar{A_i}+B_i)+S_2S_3\bar{A_i} Xi=S2ˉS3ˉ+S2ˉS3(Aiˉ+Biˉ)+S2S3ˉ(Aiˉ+Bi)+S2S3Aiˉ
Y i = S 0 ˉ S 1 ˉ A i ˉ + S 0 ˉ S 1 A i ˉ B i + S 0 S 1 ˉ A i ˉ B i ˉ Y_i=\bar{S_0}\bar{S_1}\bar{A_i}+\bar{S_0}S_1\bar{A_i}B_i+S_0\bar{S_1}\bar{A_i}\bar{B_i} Yi=S0ˉS1ˉAiˉ+S0ˉS1AiˉBi+S0S1ˉAiˉBiˉ

带一下

X i = S 3 A i B i + S 2 A i B i ˉ ‾ X_i=\overline{S_3A_iB_i+S_2A_i\bar{B_i}} Xi=S3AiBi+S2AiBiˉ
Y i = A i + B 0 B i + S i B i ˉ ‾ Y_i=\overline{A_i+B_0B_i+S_i\bar{B_i}} Yi=Ai+B0Bi+SiBiˉ
F i = Y i ⨁ X i ⨁ C n + i F_i=Y_i\bigoplus X_i\bigoplus C_{n+i} Fi=YiXiCn+i
C n + i + 1 = Y i + X i C n + i C_{n+i+1}=Y_i+X_iC_{n+i} Cn+i+1=Yi+XiCn+i

算术逻辑运算的实现

多一个控制端M,控制算术操作还是逻辑操作。
在这里插入图片描述

两级先行进位的ALU

在这里插入图片描述

2.5.3 内部总线

根据逻辑结构 单向传送总线、双向传送总线
根据总线位置 内部总线、外部总线

2.5.4 定点运算器的基本结构

在这里插入图片描述

单总线结构的运算器

单总线结构的运算器如(a)所示。由于所有部件都接到同一总线上,所以数据可以在任何两个寄存器之间,或者在任一个寄存器和ALU之间传送。

双总线结构的运算器

双总线结构的运算器如(b)所示。在这种结构中,两个操作数同时加到ALU进行运算,只需一次操作控制,而且马上就可以得到运算结果。

三总线结构的运算器

三总线结构的运算器如演示©所示。在三总线结构中,ALU的两个输入端分别由两条总线供给,而ALU的输出则与第三条总线相连。

2.6 浮点运算方法和浮点运算器

2.6.1 浮点加法、减法运算

在这里插入图片描述

2.6.2 浮点乘法、除法运算规则

  1. 0操作数检查,如果被除数 x x x为0,则商为0,如果除数因为0,则商为 ∞ \infty
  2. 阶码加/减操作
  3. 尾数乘/除操作
  4. 结果规格化
  5. 舍入处理
  6. 确定积的符号

2.6.3 浮点运算流水线

流水线原理

把输入的任务分割为一系列子任务,使各子任务能在流水线的各个阶段并发地执行。
在这里插入图片描述
S i S_i Si过程段,缓存寄存器(L),统一的的时钟(C)。

流水线浮点加法器

在这里插入图片描述


总结

数字在计算机里存储和运算

posted @   赫凯  阅读(136)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示