【王道计算机组成原理】第二章 数据的表示和运算

2.1 数制与编码

2.1.1 进位计数制

image-20220717172615222

各种进制的常见书写方式:

image-20220717204709873

r进制

image-20220717172854596
不同符号反映不同权重
  • 十进制
image-20220717173047318
  • 推广:r 进制计数法
image-20220717173202855

任意进制->十进制

image-20220717204449285

二进制<->八进制、十六进制

image-20220717204558859

十进制->任意进制

image-20220717204923680

eg:75.3

整数部分 = 75:

image-20220717204959578

小数部分 = 0.3:

image-20220717205129864

  • 十进制->二进制(拼凑法)

十进制:260.75 -> 1 ¦ 0 0 0 0 ¦ 0 1 0 0 . 1 1

整数部分:260 = 256 + 4 = 2 8 + 2 2

小数部分:0.75 = 0.5 + 0.25 = 2 -1 + 2 -2

十进制:533.125 -> 1 0 ¦ 0 0 0 1 ¦ 0 1 0 1 . 0 0 1

整数部分:533 = 512 + 16 + 4 + 1 = 2 9 + 2 4 + 2 2 + 2 0

小数部分:0.125 = 2 -3

image-20220717211551359

真值和机器数

image-20220717211638302

image-20220717211702825

2.1.2 BCD码 *

(考纲已删)

image-20220717211933200

如 985 的 8421 码为:1001 1000 0101

image-20220717213623344 image-20220718001528112

其他BCD码

image-20220718002355582
image-20220718002415419

2.1.3 定点数的编码表示

无符号整数的表示和运算

image-20220719160615081
  • 无符号整数在计算机硬件内如何表示

计算机硬件能支持的无符号位数是有上限的,是由机器字长限制的:

image-20220719162748080

无符号整数的表示:

image-20220719162929376
  • 加法、减法运算的实现原理

✨ 加法:

image-20220719163028532

✨ 减法:

image-20220719163251062
A是被减数、B是减数

减数B进行变形:

image-20220719163527493

减法变加法:

image-20220719163622171
image-20220719163641131

带符号整数的表示和运算

image-20220719163949140 image-20220719164020703
原码表示
image-20220719164143574

原码缺点:

image-20220719172133984
补码表示
  • 原码->反码->补码的转换
image-20220719172347909 image-20220719172604569
  • 补码的加法运算

例1:

image-20220719172825275

例2:

image-20220719173314394
  • 补码的减法运算
image-20220719173612119

对比无符号整数的减法运算

image-20220719174440069

例3:

image-20220719174651242
image-20220719174714275
移码表示
  • 原、反、补、移码的转换

image-20220719175127284

  • 移码
image-20220719175247117 image-20220719175358051
原/反/补/移码特性对比
image-20220719174759070 image-20220719175439794

image-20220719175600211

练习:

image-20220719175717830

定点小数的表示和运算

  • 定点整数、定点小数
image-20220719201926156
  • 原码
image-20220719202058636
  • 定点小数原、反、补码的转换
image-20220719202145998
  • 定点小数的加/减运算

image-20220719202455961

  • 定点小数VS定点整数

image-20220719202549486

补码不同于原码、反码,补码的0只有一种表示形式,所以多出来的那位我们人为使它用以表示-1。

image-20220719203944180

例1:

整数补码的加法运算:

image-20220719204245241

小数补码的加法运算:

image-20220719204619787

例2:

整数补码的加法运算:

image-20220719204747417

小数补码的加法运算:

image-20220719204819007

例3:

整数补码的减法运算:

image-20220719204844665

小数补码的加法运算:

image-20220719204946712

2.2 运算方法和运算电路

2.2.0 奇偶校验码*

(大纲已删)

image-20220719205329025

奇偶校验码

image-20220719211620754

例:

image-20220719212024599

重点体会 异或运算

2.2.1 ALU算术逻辑单元

(电路基本原理&加法器设计)

image-20220729235907133
  • ALU
image-20220730000949213
一般计算机的位数就是机器字长
  • 最基本的逻辑运算
image-20220730001249210
与、或 双目运算;非 单目运算
image-20220730001435493
  • 复合逻辑

image-20220730001915182

同或:

image-20220730002002293
  • 用门电路求偶校验位
image-20220730002139218
  • 一位全加器(实现加法运算)

image-20220730002505303

  • 串行加法器
image-20220730002607661
  • 并行加法器
image-20220730002654442

运算速度很大程度上取决于进位速度


image-20220730002950087

2.2.2 并行进位加法器

image-20220730221748359
  • 怎样更快的产生进位?
image-20220730221900174

为了方便观看,记 Gi、Pi

image-20220730222017730
注:这里 ‘+’ 表示 ‘或运算’;‘·’ 表示 ‘与运算’
高位运算需要用到低位计算出的 G i、P i

一般以4个FA作为1个加法器

本小节不是重点,慢慢理解

2.2.3 补码加减运算器

  • 加法器原理
image-20220730222908715
  • 回顾:补码加/减法运算方法
image-20220730223638300
  • 实现补码加减运算:

有符号数:

image-20220730224909446

无符号数同:

image-20220730224955045

底层硬件计算逻辑相同,但是 有符号数 和 无符号数 判断溢出的方式不同

2.2.4 标志位生产

(判断溢出的方式)

image-20220730225751300

image-20220730230235586

image-20220730230536589

2.2.5 移位运算

image-20220730230616859

算数移位

对于10进制:

image-20220730231454093

对于2进制:

⚪ 原码

定点整数:

算数右移:

image-20220730231730064

算数左移:

image-20220730232226489
定点小数:
image-20220730231937281

⚪ 反码

image-20220730232118594

⚪ 补码

image-20220730232634156
  • 小总结:
image-20220730232808957
  • 应用举例:

计算机的乘法是基于 算数移位 和 加法 进行的

image-20220730233001750

逻辑移位

image-20220730233033939
  • 应用举例
image-20220730233200230

循环移位

image-20220730233420303
  • 应用举例

对于 大端存储(先存高字节再存低字节)和 小端存储(先存低字节再存高字节) 之间进行转换


image-20220730233549075

2.2.6 定点数运算

乘法运算

image-20220804162954065
  • 实现思想
image-20220804163300322 image-20220804163416350

回忆运算器的基本组成:

image-20220804164113626
· 原码的一位乘法

原码一位乘法:

image-20220804164214101

最低位

image-20220804164516640 image-20220804164713679 image-20220804164746020

下一位的运算同上:

image-20220804164946827 image-20220804165056048 image-20220804165107574

再下一位:

image-20220804165141218

image-20220804165230423image-20220804165256818

再下一位:

image-20220804165256818 image-20220804165347628 image-20220804165409556

最后的符号位不用参与运算,移位进行了 4 次 (即 n 次)

最后修改符号位:

image-20220804172316685
  • 做题手动模拟运算

原码运算时用双符号位或单符号位都可以。但是为了避免和补码运算记混,建议用双符号位。

image-20220804172800158
· 补码的一位乘法
image-20220804173556486
  • 补码的一位乘法

辅助位是把MQ扩展了一位来存储

MQ中的最低位指参与乘法运算的最低位(就是不算上 辅助位)

CPU中所有的寄存器长度一般都是统一的,MQ多增加了一位,因此ACC、X也多加一位(多出来的一位可以用来表示 双符号位 的补码)

被乘数采用双符号位的补码,而乘数采用但符号位的补码

image-20220804175128286

  • 手算模拟

image-20220804175154351


image-20220804175436458

除法运算

image-20220804213410737
  • 实现思想
image-20220804215355262 image-20220804215407976

回忆运算器基本组成:

image-20220804215459246
· 原码除法:恢复余数法
image-20220804220401803

默认先上商1:

image-20220804220509303

上商1后计算结果11110送到ACC更新:

image-20220804220615546

ACC检测到符号位为1,即负数,说明应上商0,需要恢复:

image-20220804220755130 image-20220804221006871

ACC、MQ逻辑左移:

image-20220804221227742

确定商的下一位,同上,先上商1:

image-20220804221351512 image-20220804221405041 image-20220804221421686

下一位:

image-20220804221439503 image-20220804221452880 image-20220804221523800 image-20220804221537134

下一位:

image-20220804221622291 image-20220804221644919 image-20220804221658146 image-20220804221709178

下一位:

image-20220804221726255

计算符号位:为0

最终结果:

image-20220804221756755
  • 手算模拟:

image-20220804222125747

能否不恢复余数?----> 加减交替法(对恢复余数法的一种优化)

image-20220804222534442

image-20220804222847605

image-20220804223201902

定点小数除法规定 被除数 < 除数,否则结果会大于1,定点小数无法表示大于1的范围。

硬件通过第一步的商来检测:正常情况第一步上商1得到的余数一定要是一个负值(若为正说明被除数 > 除数)

· 补码除法:加减交替法

与原码的加减交替法类似

image-20220804225640019
  • 补码加减交替法:

image-20220804230240232


image-20220804230259033

2.2.7 C语言类型转换

image-20220804230829661

2.2.8 数据的存储和排列

  • 大小端模式

H:16进制 ; D:10进制 ; B:2进制

image-20220804232421564
  • 边界对齐 存储方式

image-20220804233045075

字地址 转 字节地址 :字地址逻辑左移两位(即×4,因为上图中 1字 = 4B)

半字地址 转 字节地址 :半字地址逻辑左移一位

2.3 浮点数的表示与运算

image-20220804233100507

2.3.1 浮点数的表示

  • 定点数的局限性
image-20220805163125361
  • 从科学计数法理解浮点数
image-20220805164644534
  • 浮点数的表示
image-20220805164835718

例:

image-20220805165418644 image-20220805165653190

b的尾数丢失一位,会影响精度,如何优化:

  • 浮点数尾数的规格化

仍以上面的 b 为例:

image-20220805170547137

浮点数尾数的规格化:

image-20220805170806247
  • 规格化浮点数的特点
image-20220805171259972

负上溢、正上溢已从考试大纲删除


image-20220805173245813

2.3.2 IEEE754

念作 “I triple E” image-20220805173418841

  • 回顾:
image-20220805173625480

image-20220805174041093

移码偏置值取 2n-1 - 1:

image-20220805174858258

其中:

真值 -128 = - 1000 0000 B

移码 = - 1000 0000 + 0111 1111 偏置值比 -128的绝对值 更小

移码位数只有 8 bit,所有的 ± 运算默认会再进行 mod 28 (即在原有的基础上加上 1 ¦ 0000 ¦ 0000)

故该处:image-20220805174834351

  • IEEE754标准

规格化的原码尾数,最高数值位一定是1,因此干脆将其隐藏起来,可以多利用一位。做题时 记得在小数点前加上1,即 1.M才是尾数真正的值

IEEE754中将 阶码全1、全0用作特殊用途,故真值范围为 -126 ~ 127 (原本应为 -128 ~ 127,其中-128为全1、-127为全0,故减去两个数)

image-20220805175827267

上图中 float 偏置值: 2 8 - 1 - 1 = 128 - 1 = 127

double 偏置值: 2 11 - 1 - 1 = 2 10 - 1 - 1 = 1023 即 011¦1111¦1111

计算阶码真值时,可以将移码和偏移量 看作无符号数进行计算

例:

image-20220805180508426

例:

image-20220805215708038
  • IEEE754标准单精度浮点型能表示的最小绝对值、最大绝对值

image-20220805220050356

  • 若要表示的数绝对值还要更小怎么办?
image-20220805220647788
image-20220805220705267

2.3.3 浮点数的运算

image-20220805220807745

浮点数的加减运算

image-20220805221849978

例:

image-20220805224004528

  • 舍入
image-20220805224306408

强制类型转换

考试大多考察32位机器

image-20220805224720628image-20220805224801542


image-20220805224801542
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值