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

第二章 数据的表示和运算

数制与编码

进制转换

image-20210816151506379

image-20210816151525627

image-20210816151704744

使用二进制的原因

image-20210816151746810

二进制与八进制、十六进制的转换

image-20210816170520185

各种进制的书写方式

image-20210816170609233

十进制转换为任意进制

整数部分

image-20210816172526371

\[\begin{align} &十进制转换二进制\\ &如(75)_{10}\\ &\frac{75}{2}=37……1\space K_0\\ &\frac{37}{2}=18……1\space K_1\\ &\frac{18}{2}=9……0\space K_2\\ &\frac{9}{2}=4……1\space K_3\\ &\frac{4}{2}=2……0\space K_4\\ &\frac{2}{2}=1……0\space K_5\\ &\frac{1}{2}=0……1\space K_6\\ &K_0K_1K_2K_3K_4K_5K_6=1101001 \end{align} \]

image-20210816171647008

小数部分

image-20210816171814863

\[\begin{align} &十进制转换二进制\\ &如(75.3)_{10} \space\space小数部分=0.3\\ &0.3*2=0.6=0+0.6 \space K_{-1}\\ &0.6*2=1.2=1+0.2 \space K_{-2}\\ &0.2*2=0.4=0+0.4 \space K_{-3}\\ &0.4*2=0.8=0+0.8 \space K_{-4}\\ &0.8*2=1.6=1+0.6 \space K_{-5}\\ &……\\ &0.3D=0.01001……B\\ &小数无法准确表述\\ \end{align} \]

image-20210816185444520

十进制转换二进制(拼凑法)

image-20210816185544178

总结

image-20210816185703356

BCD码(Binary-Coded Decimal)

image-20210816190001213

image-20210816190027112

1

修正数据

\[\begin{align} &(9+9)_{10}\\ &(9)_{10}\rightarrow (1001)_2\\ &(9+9)_{2}=1001 1001\\ &1001\\ +&1001\\ -&---\\ 1&0010\\ &10010超出了8421码中的1010-1111\\ &+(6)_{10}\Leftrightarrow+(0110)_2修正\\ 1&0010\\ +&0110\\ -&---\\ 1&1000\\ \end{align} \]

相加结果在合法范围(1010~1111)内,不需要修正

其他编码

image-20210816191414180

总结

image-20210816191502468

字符与字符串

ASCII码

image-20210816191908865

可印刷字符:32~126

其余为控制、通信字符

大写字母:65(0100 0001)~ 90(0101 1010)

小写字母:97(0110 0001)~ 122(0111 1010)

image-20210816191918864

汉字的表示和编码

image-20210816192307500

输入:输入编码

输出:汉字字形码

字符串

image-20210816192437778

image-20210816192421004

大端模式&小端模式

image-20210816192532305

image-20210816192546334

总结

image-20210816192647756

奇偶校验码

image-20210816192713349

校验原理

image-20210816212812004

image-20210816212822972

image-20210816212857645

\[\begin{align} &当d=1时,无检错能力;当d=2时,有检错能力;当d\geq3时,若设计合理,可能具有检错纠错能力(海明码)\\ \end{align} \]

奇偶校验码

image-20210816213209404

例题

image-20210816213224588

\[\begin{align} &奇校验:(1)1001101~~(0)1010111\\ &偶校验:(0)1001101~~(1)1010111\\ \end{align} \]

image-20210816213821703

只能发现数据代码中奇数位的出错情况,但不能纠错

总结

image-20210816213958286

海明码

简单思路

image-20210816214741871

求解步骤

image-20210816214925317

image-20210816214943916

22

总结

image-20210816215343843

循环冗余校验码

image-20210816220626969

基本思想

image-20210816220739690

校验步骤(模二除)

image-20210816221216976

\[\begin{align} &G(x)=x^3+x^2+1=1*x^3+1*x^2+0*x^1+1*x^0\rightarrow 1101\\ &~~~~~~110101\\ &-------------------\\ 1101~|&101001000\\ &1101\\ &~~1110\\ &~~1101\\ &-------------------\\ &~~~~0111\\ &~~~~0000\\ &-------------------\\ &~~~~~~1110\\ &~~~~~~1101\\ &-------------------\\ &~~~~~~~~0110\\ &~~~~~~~~0000\\ &-------------------\\ &~~~~~~~~~~1100\\ &~~~~~~~~~~1101\\ &-------------------\\ &~~~~~~~~~~~~001\rightarrow校验位\\ &对应的CRC码为101001~~001 \end{align} \]

image-20210816223036580

simage-20210816223116457

余数为001、010时并不能确定是哪一位出错了

此时是信息位过多,降低信息位就可以解决问题

image-20210816223343803

\[\begin{align} &K个信息位,R个校验位,若生成多项式选择得当,且2^R\geq K+R+1,则CRC码可纠正1位错\\ \end{align} \]

总结

image-20210816223624746

定点数的表示

image-20210817150807156

image-20210817150828505

无符号数

通常只有无符号整数,而没有无符号小数

\[\begin{align} &1001100B\\ &=1*2^7+1*2^6+0*2^5+0*2^4+1*2^3+1*2^2+0*2^1+0*2^0\\ &=156D\\ \end{align} \]

image-20210817152234260

有符号数的定点表示

image-20210817152317628

image-20210817152329803

原码

用尾数表示真值部分的绝对值,符号位“0/1”对应“正/负”

若机器字长为n+1位,则尾数占n位

image-20210817152652821

image-20210817152817777

image-20210817152853249

反码

若符号位为0,则反码与原码相同

若符号位为1,则数值位全部取反

image-20210817153901579

反码是原码转变为补码的一个中间状态

image-20210817153938259

补码

正数的补码=原码

负数的补码=反码末位+1(要考虑进位)

image-20210817154251701

image-20210817154507885

image-20210817154737475

\[\begin{align} &设机器字长为8位\\ &[+0]_{原}=0000~0000\\ &[+0]_{反}=0000~0000\\ &[+0]_{补}=0000~0000\\ &\\ &[-0]_{原}=1000~0000\\ &[-0]_{反}=1111~1111\\ &[-0]_{补}=1~0000~0000\\ &由于机器字长为8位,进位丢弃\\ &[-0]_{补}=0000~0000\\ \end{align} \]

image-20210817154756782

逆向

将负数补码转回原码的方法相同:尾数取反,末尾+1

\[\begin{align} &[-19]_{原}=1001~0011\\ &[-19]_{反}=1110~1100\\ &[-19]_{补}=1110~1101\\ &[-19]_{原}=1001~0010+0000~0001=1001~0011\\ \end{align} \]

移码

补码的基础上将符号位取反

移码只能用于表示整数

image-20210817161728639

image-20210817161811479

几种码表示定点整数

image-20210817161901204

练习

\[\begin{align} &假设机器字长为8位\\ &定点整数x=50\\ &[+50]_{原}=0011~0010\\ &[+50]_{反}=0011~0010\\ &[+50]_{补}=0011~0010\\ &[+50]_{移}=1011~0010\\ &定点整数x=-100\\ &[-100]_{原}=1110~0100\\ &[-100]_{反}=1001~1011\\ &[-100]_{补}=1001~1100\\ &[-100]_{移}=0001~1110\\ \end{align} \]

知识回顾

image-20210817162836043

image-20210817162909150

各种码的作用

image-20210817174808702

用加法代替减法

表盘为例

image-20210817174923374

\[\begin{align} &10+9=19\\ &19\%12=7\\ &相当于求余数\\ \end{align} \]

模运算的性质

image-20210817175105841

image-20210817175135056

可以说在模12的情况下上述数字等价

image-20210817175319116

其中-3和9互为补数,二者绝对值之和等于模

\[\begin{align} 有符号数&~~~~~~~~~~~~~~~~~~~无符号数\\ 14~~~~~~&0000~1110~~~~~~~~14\\ -14~~~+&1000~1110~~~~~~142\\ -----&-----------\\ 0~~~~~~&1001~1100~~~~~~156\\ &模-a的绝对值=a的补数\\ &0000~1110\\ -&0000~1110\\ -----&-----------\\ &0000~0000\\ &\\ &模2^8-0000~1110\\ &1~0000~0000\\ -&~~~0000~1110\\ -----&-----------\\ &~~~1111~0010\\ -----&-----------\\ &~~~0000~1110\\ +&~~~1111~0010\\ -----&-----------\\ &~1~0000~0000\\ \end{align} \]

image-20210817205933468

image-20210817210036825

\[\begin{align} &求-66的补码\\ &[-66]_{原}=1100~0010\\ &[-66]_{反}=1011~1101\\ &[-66]_{补}=1011~1110\\ &[+88]_{原}=0101~1000\\ &1101~1000\\ +&0011~1110\\ --&-----------------\\ 1~&0001~0110~~~~~~22D\\ \end{align} \]

image-20210817210834007

移位运算

image-20210817210954067

算术移位

image-20210817211021401

image-20210817211038370

原码的算术移位

image-20210817215337945

image-20210817215441999

\[\begin{align} &[+20]_{原}=0001~0100\\ &{左移一位}=0010~1000=+40D\\ \end{align} \]

反码的算数移位

image-20210817220344350

补码的算数移位

image-20210817220705999

\[\begin{align} &[-20]_{原}=1001~0100\\ &[-20]_{反}=1110~1011\\ &[-20]_{补}=1110~1100\\ &左移一位=1010~1000\\ &[-20]_{原}=1001~0100\\ &[-20]_{反}=1110~1011\\ &[-20]_{补}=1110~1100\\ &右移一位=1111~0110\\ \end{align} \]

逻辑移位(针对无符号数)

image-20210817223327263

应用举例

image-20210817223435260

循环移位

image-20210817223556337

总结

image-20210817223618338

加减运算

image-20210817223713859

原码的加减运算

image-20210817223916197

image-20210817223858860

补码的加减运算

image-20210817224026533

image-20210817224225333

\[\begin{align} &A=15,B=-24,C=124,求[A+C]_{补}[B-C]_{补}\\ &[A]_{原}=0000~1111\\ &[A]_{反}=0000~1111\\ &[A]_{补}=0000~1111\\ &[B]_{原}=1001~1000\\ &[B]_{反}=1110~0111\\ &[B]_{补}=1110~1000\\ &[C]_{原}=0111~1100\\ &[C]_{反}=0111~1100\\ &[C]_{补}=0111~1100\\ &[A+C]_{补}\\ &0000~1111\\ +&0111~1100\\ ----&------------\\ &1000~1011\\ &1111~0100\\ &1111~0101~~~~~~-117D\\ &[B-C]_{补}\\ 1&~0000~0000\\ -&~0111~1100\\ ----&-------------\\ &~1000~0100\\ +&~1110~1000\\ ----&-------------\\ &~0110~1100\\ &~0110~1100\\ &~0110~1100~~~~~~+108D\\ \end{align} \]

出现了溢出

溢出判断

image-20210818101119756

一位符号逻辑表达式

image-20210818103641338

image-20210818103733616

image-20210818103840213

进位判断

image-20210818104021428

双符号位

image-20210818104120553

image-20210818104218876

符号扩展

整数

image-20210818104319801

image-20210818104339486

小数

image-20210818104419340

总结

image-20210818104527681

乘法运算

手算乘法(十进制)

image-20210818104738188

手算乘法(二进制)

image-20210818105646867

image-20210818105737162

原码一位乘法

image-20210818105940026

image-20210818105949538

image-20210818110006301

实现方法:先加法再移位,重复n次

(0)乘法进行前ACC置0

image-20210818110433413

(1)第一步加法

加法

image-20210818110418010

移位

image-20210818110553749

(2)第二步加法

加法

image-20210818110718513

移位

image-20210818110802249

(3)第三步加法

加法

image-20210818110944025

移位

image-20210818110955336

(4)第四步加法

加法

image-20210818111035097

移位

image-20210818111050910

乘法结果

image-20210818111140946

修正符号位

image-20210818111314897

原码一位乘法(手算模拟)

image-20210818111529319

\[\begin{align} &高位部分积~~~~ ~~~~低位部分积~~~~ ~~~~ ~~~~说明\\ &~~00.0000~~~~ ~~~~ ~~~~ ~~~~ 101\underline{1}|~~~~ ~~~~ 低位=1~~~~ +|x|\\ +|x|&~~00.1101~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~|\\ ----&---------------------\\ &~~00.1101\\ 右移&~~00.0110~~~~ ~~~~ ~~~~ ~~~~ 110\underline{1}|1~~~~ ~~~ 低位=1~~~~ +|x|\\ +|x|&~~00.1101~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~|\\ ----&---------------------\\ &~~01.0011\\ 右移&~~00.1001~~~~ ~~~~ ~~~~ ~~~~ 111\underline{0}|11~~ ~~~低位=0~~~~ +0 \\ +&~~00.0000\\ ----&---------------------\\ &~~00.1001\\ 右移&~~00.0100~~~~ ~~~~ ~~~~ ~~~~ 111\underline{1}|011 ~~~低位=1~~~~ +|x| \\ +|x|&~~00.1101\\ ----&---------------------\\ &~~01.0001\\ 右移&~~00.1000~~~~ ~~~~ ~~~~ ~~~~ 111\underline{1}|1011 ~右移部分积和乘数全部移出 \\ &|x|=00.10001111\\ &x*y=-0.10001111\\ \end{align} \]

补码的一位乘法

image-20210818115809711

image-20210818115925223

辅助位

image-20210818120109935

手算模拟

image-20210818120225120

\[\begin{align} &高位部分积~~~~ ~~~~低位部分积~~~~ ~~~~ ~~~~说明\\ &~~00.0000~~~~ ~~~~ ~~~~ 0.101\underline{1}|0~~~~ ~~~~ ~~~~起始情况\\ +[-x]_补&~~00.1101~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ Y_4Y_5=10,Y_5-Y_4=-1,+[-x]_{补}\\ ----&-----------------------------\\ &~~00.1101\\ 右移&~~00.0110~~~~ ~~~~ ~~~~ 10.10\underline{1}|10~~~~ ~~~~ ~~~~右移部分积和乘数\\ +0&~~00.0000~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ Y_4Y_5=10,Y_5-Y_4=0,+0\\ ----&-----------------------------\\ &~~00.0110\\ 右移&~~00.0011~~~~ ~~~~ ~~~~ 010.1\underline{0}|110~~~~ ~~~~ ~~~~右移部分积和乘数\\ +[x]_补&~~11.0011~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ Y_4Y_5=01,Y_5-Y_4=1,+[x]_补\\ ----&-----------------------------\\ &~~11.0110\\ 右移&~~11.1011~~~~ ~~~~ ~~~~ 0010.\underline{1}|0110~~~~ ~~~~ ~~~~右移部分积和乘数\\ +[-x]_补&~~00.1101~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ Y_4Y_5=10,Y_5-Y_4=-1,+[-x]_补\\ ----&-----------------------------\\ &~~00.1000\\ 右移&~~00.0100~~~~ ~~~~ ~~~~ \underline{\underline{0001}}\underline{0}.|10110~~~~ ~~~~ ~~~~右移部分积和乘数\\ +[x]_补&~~11.0011~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ Y_4Y_5=01,Y_5-Y_4=1,+[x]_补\\ ----&-----------------------------\\ &~~11.0111\\ &[x*y]_补=11.0111~0001\\ &x*y=-0.1000~1111\\ \end{align} \]

除法运算

手算除法(十进制)

image-20210818164639383

image-20210818164800923

手算除法(二进制)

image-20210818165353507

恢复余数法

image-20210818165445280

image-20210818165452257

原码除法:恢复余数法

image-20210818165629968

(0)初始

image-20210818165932882

(1)第一步

上商

image-20210818170053560

求余数

image-20210818170126119

判断上商是否正确

01011上商后得11110,相减结果为负,应上商0

image-20210818170346652

修正

image-20210818170615830

逻辑左移

image-20210818170721334

(2)第二步

上商

image-20210818171041616

求余数

image-20210818171106064

判断上商是否正确

相减结果为正数,上商正确

image-20210818171137867

逻辑左移

image-20210818171227227

(3)第三步

上商

image-20210818171303025

求余数

image-20210818171325113

判断上商是否正确

上商无误

逻辑左移

image-20210818171415728

(4)第四步

上商

image-20210818171435689

求余数

image-20210818171543623

判断上商是否正确

相减结果小于0,上商有误

image-20210818171607821

修正

image-20210818171651097

逻辑左移

image-20210818171707161

(5)第五步:最后一步除法

上商&求余数

image-20210818171740836

判断上商是否正确

image-20210818171958298

最后一步除法,如果上商求余数结果小于0.还需要继续恢复余数

(6)最后一步

\[\begin{align} &余数=ACC*2^{-n}\\ \end{align} \]

image-20210818172147672

原码除法(手算)

image-20210818172413446

image-20210818172521166

image-20210818172536725

加减交替法

image-20210818172703805

image-20210818172802845

image-20210818172846819

默认规定

被除数要小于除数,否则硬件电路无法运行,如果被除数大于除数,商的结果为大于1的数将无法表示

通过第一步的商来判断被除数与除数的大小关系

第一步商的结果一定为负值,如果为正值说明被除数比除数大,硬件电路会立即停止运算

补码除法

image-20210818173847325

加减交替法

image-20210818174046528

总结

image-20210818174114474

C语言中的强制类型转换

image-20210818174208997

image-20210818174617441

数据的存储和排列

大小端模式

image-20210818174833219

边界对齐

image-20210818174951313

image-20210818175218113

浮点数的表示

image-20210818175458539

image-20210818175542852

image-20210818175715275

image-20210818175744300

image-20210818175928674

image-20210818180007273

浮点数尾数的规格化

image-20210818180100473

左规&右规

image-20210818180130988

image-20210818180338915

image-20210818180324786

image-20210818180346659

规格化浮点数的特点

image-20210818180603775

image-20210818180649586

image-20210818181440847

总结

image-20210818181549367

image-20210818181608485

IEEE754 浮点数标准

image-20210818181834476

\[\begin{align} &IEEE754规定偏置值=2^{n-1}\\ \end{align} \]

image-20210818181948886

image-20210818181959262

IEEE 754 标准

image-20210818182256074

image-20210818182510660

image-20210818182527147

\[\begin{align} &(-0.75)_{10}=(-0.11)_2=(-1.1)*2^{-1}\\ &数符=1\\ &尾数部分=.1000~0000……(隐含最高位1)\\ &阶码真值=-1\\ &单精度浮点型偏移量=127D\\ &移码=阶码真值+偏移量=-1+111~1111=0111~1110(凑足8位)\\ \end{align} \]

image-20210818184247473

image-20210818184302357

image-20210819103810285

image-20210819103954232

image-20210819104011829

image-20210819104256678

总结

image-20210819104403670

浮点数的运算

image-20210819104849881

浮点数的加减运算

image-20210819104934093

\[\begin{align} &(0)转换格式\\ &5D=101B,\frac{1}{256}=2^{-8},X=-101*2^-8=-0.101*2^{-5}=-0.101*2^{-101}\\ &59D=111011,\frac{1}{1024}=2^{-10},Y=111011*2^{-10}=0.111011*2^{-4}=0.111011*2^{-100}\\ &X: &[阶码]_{原}=-101\\ &[阶码]_{补}=1011\\ &阶码双符号位补码:11011\\ &[尾数]_{原}=-0.101\\ &[尾数]_{补}=1.011\\ &尾数双符号位补码:11.011\\ &X=11011,11.011000000\\ &Y: &[阶码]_{原}=-100\\ &[阶码]_{补}=1100\\ &阶码双符号位补码:11100\\ &[尾数]_{原}=0.111011\\ &[尾数]_{补}=0.111011\\ &尾数双符号位补码:00.111011\\ &X=11100,00.111011000\\ &浮点数加减法运算步骤\\ &(1)对阶\\ &小阶向大阶看齐,尾数每右移一位,阶码+1\\ &[1]求阶差:[\Delta E]_补=||E_X|_原+|E_Y|_补|=11011+00100=11111\\ &\Delta=-1\\ &[2]对阶:X:11011,11.011000000\rightarrow 111011,11.1011000000\\ &X=-0.0101*2^{-100}\\ &(2)尾数减法\\ &-Y=11100,11.000101000\\ &11011,11.011000000\\ +&11100,11.000101000\\ ---&----------------------------\\ &10.110001000\\ &X_Y=11100,10.110001000\\ &(3)规格化\\ &X_Y=11100,10.110001000\rightarrow11101,011000100\\ &(4)舍入 \\ &无需舍入\\ &(5)判断溢出\\ &常阶码,无溢出,结果真值为2^{-3}*(-0.1001111)_2 \end{align} \]

舍入

image-20210819162442206

121

image-20210819162507730

强制类型转换

image-20210819162726098

总结

image-20210819162833647

加法器设计

算术逻辑单元ALU

image-20210819164446749

image-20210819164455060

image-20210819164556522

机器字长=ALU一次可以处理的数据长度

基本逻辑运算

image-20210819165217873

image-20210819165247237

用门电路求偶校验位

image-20210819165632072

image-20210819165716446

一位全加器

image-20210819170022600

串行加法器

image-20210819170131025

并行加法器

image-20210819170301024

总结

image-20210819170321886

加法器、ALU的改进

并行加法器的优化

image-20210819170545212

image-20210819170551983

image-20210819170914958

image-20210819170704533

image-20210819170711072

image-20210819170746082

组内并行&串行

image-20210819170945343

image-20210819171208125

image-20210819171242083

image-20210819171251558

ALU芯片优化

image-20210819171316532

image-20210819171332684

image-20210819171432020

posted on 2021-08-19 17:16  blueskylabor  阅读(279)  评论(0)    收藏  举报