计算机组成原理知识总结(二)运算方法和运算器
系列文章目录
2.1 数据与文字的表示方法
2.1.1 数据格式
分为定点格式和浮点格式
定点格式
因为不用考虑小数点,所以只能表示纯小数和纯整数
纯小数小数点在
x
n
x_n
xn和
x
n
−
1
x_{n-1}
xn−1之间,纯整数在
x
0
x_0
x0右边。
小数的范围为:
0
≤
∣
x
∣
≤
1
−
2
−
n
0≤|x|≤1-2^{-n}
0≤∣x∣≤1−2−n
整数的范围为:
0
≤
∣
x
∣
≤
2
n
−
1
0≤|x|≤2^{n}-1
0≤∣x∣≤2n−1
浮点格式
浮点是有效数字和数的范围分开存储,比如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是浮点数的指数,是纯整数
十进制数串表示方法
- 字符串形式
- 压缩的十进制数串形式,用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,2n−x=2n+∣x∣2n>x⩾00⩾x>−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+1−∣x∣2n>x⩾00⩾x>−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]补=xnxn−1xn−2...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=0n−12ixi
规则就是,如果是正整数,那么三码都是一样的,如果是负整数,符号位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
ekek−1ek−2...e2e1e0(最高位为符号位),移码的传统定义是
[
e
]
移
=
2
k
+
e
,
2
k
>
e
⩾
−
2
k
[e]_移 = 2^k+e, 2^k>e\geqslant-2^k
[e]移=2k+e,2k>e⩾−2k
主要是比较大小或者阶操作
利用二进制数,比较十进制数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】移=25+ 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)∗2E−127
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}) [x−y]补=[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
S0、S1、S2、S3分别控制输入
A
i
、
B
i
A_i、B_i
Ai、Bi,产生
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=Yi⨁Xi⨁Cn+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 浮点乘法、除法运算规则
- 0操作数检查,如果被除数 x x x为0,则商为0,如果除数因为0,则商为 ∞ \infty ∞
- 阶码加/减操作
- 尾数乘/除操作
- 结果规格化
- 舍入处理
- 确定积的符号
2.6.3 浮点运算流水线
流水线原理
把输入的任务分割为一系列子任务,使各子任务能在流水线的各个阶段并发地执行。
S
i
S_i
Si过程段,缓存寄存器(L),统一的的时钟(C)。
流水线浮点加法器
总结
数字在计算机里存储和运算
本文来自博客园,作者:赫凯,转载请注明原文链接:https://www.cnblogs.com/heKaiii/p/17137394.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了