第六章、计算机组成原理—数字
主要内容
1、计算机中数的表示
2、计算机的运算方式
3、运算器的设计
4、主要讲解ALU
6.1、无符号数和有数
6.1.1、无符号数
1、内容
1、寄存器的位数
2、反映无符号数的表示范围
3、图示

6.1.2、有符号数
1、机器数与真值
1、内容

2、原码表示法
1、整数
1、如果是正数:就是带绝对值的原码
2、如果是负数:就2^n(n是位数)-x

2、小数
1、公式

x为真值
2、例子

3、例子

4、原码特点
1、简单、直观
2、正负数,只需要更改0,1;
5、出现问题

6.1.3、补码表示法
1、补的概念
1、时钟;逆时针;顺时针
2、内容

2、结论
1、一个负数加上“模”即得该负数的补数
2、一个正数和一个负数互为补数时,绝对值的和是模数
3、例子

3、正数的补数是自己
1、 正数的补数,符号位填0,负数的符号位填1
2、两个互为补数的数,分别加上模,结果仍互为补数
3、例子

4、补码的定义
1、整数
1、如果是整数,公式

2、例子

2、小数
1、公式

2、例子

5、求补码的快捷方式
1、当真值为负值时
1、直接把真值全部取反然后+1,
2,必须考虑计算机的字长
3、例子1

4、自我理解

2、当补码为负值时,就是最高位为1的时候
1、也是一样的,符号位不变,数值取反+1
2、例子

3、练习题

6、补码最大好处是:将减法转换为加法
6.1.4、反码表示法
1、定义
1、整数
1、公式

2、注意机器字长的位数
3、例子

2、小数
1、公式

2、例子

3、注意机器字长的位数
4、例子2

6.1.5、总结
1、最高位为符号位,书写上用","(整数);或"."(小数)将数值部分和符号位隔开
2、对于正数,原码 = 补码 = 反码
3、对于负数来说,符号位都是1
4、负数原码取反+1 == 补码
5、负数原码取反 == 反码
6、已知补码的+1==原码
1、例子1

?2、例子2
1、[y] 补码 转换成[-y]补码(前提:y是正值)
1、就是[y] 补码连同符号位在内,每位取反,末尾+1,就是[-y]补码
2、(y是负值)[y] 补码 转换成[-y]补码
1、就是[y] 补码连同符号位在内,每位取反,末尾+1,就是[-y]补码
6.1.6、移码表示法
1、因为补码很难直接判断其真值的大小,所以引入移码
2、问题:-31的补码,大于+31的补码,就很难判断大小
1、移码的定义
1、公式

1、例子

2、移码和补码的比较
1、当x>0,x的移码和补码符号位相反,但是数值完全相同
2、移码和补码只相差一个符号位
1、真值、补码和移码的对照表

3、移码的特点
1、[+0]移 = [-0]移
1、内容

2、最小真值的移码为全0

6.2、数的定点表示和浮点表示
6.2.1、定点表示
1、定点机、小数定点机、整数定点机
1、小数点按约定方式标出
2、没有专门的硬件来标出小数点
2、定点机图示以及范围

1、小数定点机原码:是等比数列求和

6.2.2、浮点表示
1、问题
1、为什么在计算机要引入浮点数表示?
1、编程困难,程序员要调节小数点位置
2、数的范围很大,需要很长的机器字长
3、数据存储单元的利用率特别低
2、浮点表示的格式是什么?
3、尾数和阶吗的基值必须是2吗?基值的影响?
4、表数范围与精度和哪些因素有关?
5、为什么要引入格式化表示?
6、目前浮点数表示格式的标准是什么?
2、公式

1、尾数绝对值小于1
2、阶码是用二进制表示;阶码是整数
3、尾数的基值是:2、4、8、16
4、其中4是两个二进制组成的数;8是三个二进制组成的数;16是四个二进制组成的数
3、浮点数的表示形式

1、jf阶符:表示阶码的符号
2、Sf数符:数据的符号,也就是尾数的符号
4、浮点数的表示范围
1、一位表示阶符,一位表示尾符
2、四位表示阶码
3、十位表示尾数的数值部分
4、一共16位,表示

5、最小负数(十进制下绝对值最大则小数点最右)整个绝对值最大=尾数最大*小数点最右
6、最大负数(十进制下绝对值最小则小数点最左)整个绝对值最小=尾数最小*小数点最左
7、最小正数(十进制下数值最则小数点最左)=尾数最小*小数点最左
8、最大正数(十进制下数值最大则小数点最右)=尾数最大*小数点最右
9、小数点可以移动的范围为+-(2m-1)即最左为2^-(2m-1),最右为2^(2m-1)
10、数据长度为16位,1位表示阶符,1位表示尾符,4位表示阶嘛、10位表示尾数数值部分
1、例子

5、浮点数的规格化形式
1、基数不同,浮点数的规格化形式不同
2、r=2 :尾数最高位为1
3、r=4 :尾数最高2位不全为0
4、r=8 :尾数最高3为不全为0
5、r是基值,代表几位进制,计算机中是用2进制来存储,所以r=2时,1位表示1个数;
2、作用
1、为了保证精度,否则超出会遗失
6、浮点数的规格化
1、基数r越大,可表示的浮点数的范围越大
2、基数r越大,浮点数的精度会降低

3、不是小数点移动
4 、例子

1、例子6.13

2、例子6.14

7、机器零
1、浮点数尾数为0
1、当浮点数尾数为0,不论其阶码为何值,按机器零处理
2、阶码等于或小于它所表示的最小数时,不论尾数为何值,按机器零处理
1、当浮点数阶码等于或小于它所表示的最小数时,不论尾数为何值,按机器零处理
2、例子

6.2.3、IEE754标准
1、组成图

2、短实数、长实数、临时实数

6.2.4、课后习题
1、习题16
1、题目

6.3、定点运算
6.3.1、移位运算
1、移位运算的数学意义
1、移位的意义
1、机器语言:15相对于小数点左移2位,就相当于是小数点不变,数据移动
2、左移:绝对值扩大
3、右移:绝对值缩小
4、移位运算和加减运算配合,可以实现乘除运算
5、图示
2、算数移位的规则
1、符号位不能改变

1、例子

2、右移两位的那个数,最后的1被舍弃,所以是6
3、例子

4、补码的补码+1==原码
3、算数位移的硬件实现
1、示例图

4、算数移位和逻辑移位的区别
1、区别

1、例子

6.3.2、加减法运算
1、补码加减运算公式
1、公式

1、连同符号位一起相加,符号位产生的进位自然丢掉
2、例子

①该题出不准确,没有考虑机器位的字长
3、例子

①补码取反+1 = -补码
4、练习1
①题目

②答案
5、练习2
①题目

②答案

2、溢出判断
1、一位符号位判断溢出
1、参加两个操作的数,它们符号相同,运算结果的符号与原操作数的符号不同,即为溢出
2、硬件实现
①最高有效位的进位(一个数的最高位,它还有进位)符号位的进位为1,就是如果一个数的最高位运算有进位就溢出。
②数的最高位发生进位,和符号位进行异或(两个数值不相同),如果=1,就溢出
③两个正数、两个负数相加符会有溢出
3、例子

2、两位符号位判断溢出
1、公式

2、结果的双符号位相同,则没有溢出
3、结果的双符号位不同,则溢出
4、最高的符号位代表真正的符号位,第二个符号位表示运算溢出的那个数
3、补码加减法的硬件配置
1、硬件图

1、A、X均n+1位
2、减法标记Gs控制求补逻辑
6.3.3、乘法运算
1、计算机怎么做二进制乘法运算
1、分析笔算乘法
1、图解分析

2、符号位需要单独处理(同为正,异为负)
3、乘数的某一位是否要加被乘数(因为只有1,0两个数字)
4、4个位积一起相加
5、乘积的位数扩大一倍
2、笔算乘法改进(横式)
1、图解

3、改进后的笔算乘法过程(竖式)
1、步骤

1、小结
1、乘法运算 = 加+移位实现
2、n=4,加4次,乘4次;n是数值的位数
3、①乘数的末位来决定乘数是否与原部分积相加;②然后—>1位形成新的部分积,③同时乘数—>1位(末位丢弃),④空出来的高位存放部分积的低位
4、被乘数只与部分积的高位相加
5、需要三个寄存器;一个保存被乘数,其中两个需要啊具有移位功能
6、一个全加器(需要n+1位)
4、原码乘法
1、原码一位乘运算规则
1、小数和整数一样(以小数为例)
2、公式

2、原码一位乘递推公式

3、例子

1、结果

4.原码一位乘的硬件配置

2、A寄存器,最高位是数值,不是符号位,是由低位数值相加的进位
3、被乘数在X寄存器中,且保持不变
4、Q是乘商寄存器:保存乘数的数值移位;Q的高位部分,逐渐被累加和的低位部分占据;乘数的低位部分每次移位,都会遗留移位,直到完成n次移位,所有数值位被移掉,就完成运算
5、计数器C:统计移位次数,=0结束
6、S是符号位,异或方式,给S赋值
7.Gm是乘法标志
8、控制门,当乘数最末尾是1的时候,被乘数通过控制门,传入加法器进行操作;当乘数末位是0的时候,控制门直接传人0给加法器
6.3.4、除法运算
1、笔算除法怎么做
1、分析笔算除法
1、图解过程
1、过程

2、先看被除数和除数大小,如果不够,就上商0,被除数添0,再和右移一位除数比较
3、除完还是小,就上商,被除数每次添0,除数每次位移n+1次
4、符号用心算
5、与世俗不动低位补0,减右移一位的除数
6、上商位置不固定
2、笔算除法和机器除法比较
1、比较

3、原码的除法
1、以小数为例,小数和整数计算过程一样
1、公式

2、约定
1、小数定点除法x^ < y^ ;整数定点除法x>y\
2、被除数不能为0
3、除数不能为0
4、恢复余数法
1、例子

2、步骤
①先求出x的原码和y的原码;再求出y的补码,和-y的补码
②先进行x和y符号位判断,用异或方法
③看看除数是否大于被除数(不大就上0.)
④把除数+[-y]补码,得到一个结果,判断这个结果的大小,如果是正数就上商1,如果是负数就上商0(利用y的补码进行减法得到余数,再做下面操作)
⑤得到第一个商之后,就把原来的余数恢复,+[y]补码
⑥恢复之后,把余数进行逻辑左移(逻辑移动:符号位上的也是数)
⑦左移过后,就开始+[-y]补码,(用减法得到新的余数)得到一个结果,判断这个结果的大小,如果是正数就上商1,如果是负数就上商0(利用y的补码进行减法得到余数,再做下面操作)
⑧还原余数,看余数是否为正,正数就上商1
⑨重复以上步骤,最终得到商的值
⑩其中整个过程上商5次,第一次上商溢出,余数移动4次
5、不恢复余数法(改进以上方法)(也叫加减假交替法)
1、恢复余数法运算规则
1、公式

2、例子
1、例子

2、步骤
①先把x的原码、y原码、[y]补码,[-y\]补码求出来
②刚开始把除数+[-y*]补码,用来做第一次是否上商的判断(如果为0就溢出)
③经过②得到余数,判断余数的正负,此时为负,就上商0
④把余数逻辑左移1位,+[y*]补码,得到新的余数
⑤把新余数判断正负,此时为正,上商1,余数需要逻辑左移1位,根据运算规则就要+[-y*]补码(相当于减法)
⑥得到新余数,判断正负,此时为正,上商1,余数需要逻辑左移1位,根据运算规则就要+[-y*]补码(相当于减法)
⑦得到新余数,判断正负,此时为负,上商0,余数需要逻辑左移1位,根据运算规则就要+[y*]补码
⑧得到新余数,判断商是否计算完毕,得到最后数值结果
⑨两个数的符号位进行异或,得到新的符号位
3、特点
1、上商n+1次
2、第一次上商溢出
3、移动n次,加n+1次
4、用移位的次数判断除法是否结束
6、原码加减交替除法硬件配置
1、ACC用于保存被除数,除数
2、X寄存器用于保存除数
3、Q寄存器保存商
4、Gd是乘法标志
5、S是符号位
6、V:是否溢出
7、AXQ均为n+1
8、图解

6.4、浮点四则运算
6.4.1、浮点数的加减运算
1、对阶
1、求阶差
1、公式

2、比较阶码,x阶和y阶相等,就对齐了,就可以进行尾数运算了
3、xj>yj,建议是y向xj看齐,把y阶码扩大n位,为了保证数据相同,y阶的尾数也要右移n位(减小)
4、xj<yj,建议是x向y看齐,把x阶码扩大n为,为了保证数据相同,x阶的位数也要右移n位(减小)
2、对阶的原则
1、小阶向大阶看齐
1、例子

3、规格化
1、规格化数的定义
1、

2、规格化数的判断
1、S>0
①真值为:0.1XXXXXX
②原码:0.1XXXXXX
③补码:0.1XXXXXX
④反码:0.1XXXXXX
2、S<0
①真值为:-0.1XXXXXX
②原码:1.1XXXXXX
③补码:1.0XXXXXX
④反码:1.0XXXXXX
3、原码:不论正数、负数,第一位数为1
4、补码:符号位和第一数位不同
5、两个特殊例子

3、左规
1、尾数左移一位,阶码-1,直到数符和第一数位不同为止

4、右规

5、例子

4、舍入
1、在对阶和右规过程中,可能出现尾数末位丢弃,引起误差,需要考虑舍入
1、0舍 1 入法
2、恒置“1”法
1、例子

5、溢出判断

6.4.2、浮点数的乘除运算
???6.5、算术逻辑单元
6.5.1、ALU电路
1、图示

1、Ki取值不同,Fi不同
2、这个单元没有存储功能,就需要寄存器
3、自主学习四位ALU74181
①M=0 算术运算
②M= 1 逻辑运算
③S3~S0:不同取值,可以做不同运算
6.5.2、快速进位链
1、并行加法器
1、图解

1、C-1表示低位从第一位送来的数据
2、串行进位链
1、进位链是影响加法器的瓶颈
2、电路图

3、并行进位链(先行进位,跳跃进位)
1、电路图

2、为了让进位产生非常快,且电路不复杂,有两种方法
1、单重分组跳跃进位
1、n为全加器分若干小组,小组中的进位同时产生,小组与小组之间采用串行进位
2、图解

2、双重分组跳跃进位链
1、n位全加器分若干大组,大组中又包含若干小组,每个大组中小组的进位同时产生,大组与大组间用串行进位
2、原理图

3、双重分组跳跃进位链—大组进位分析
1、分析

4、双重分组跳跃进位链—大组进位线路

5、双重分组跳跃进位链—小组进位路线
1、电路图

6、n=16双重分组跳跃进位链
1、电路图

2、di和ti是由参与运算的两个数据相应的位,进行与操作、或操作得到
7、n=32双重分组跳跃进位链
1、电路图

2、di是ai和bi的余
3、ti=bi和di的或