09-计算机的运算方法

09-计算机的运算方法

一、无符号数和有符号数

1、无符号数

寄存器的位数反映无符号数的表示范围
如果寄存器是8位,表示的是0-255之间的数
如果寄存器是16位,表示的是0-65535之间的数

2、有符号数

1.机器数与真值

真值是我们平时用的数据,带正负号
保存在计算机里面的数叫做机器数,是符号数字化的的数

真值 机器数
带符号的数 符号数字化的数
+0.1011 符号0 小数点的位置约定在符号位之后 数据1011
-0.1011 符号1 小数点的位置约定在符号位之后 数据1011
+1100 符号0 数据1100 小数点的位置约定在最后
-1100 符号1 数据1100 小数点的位置约定在最后

有两种机器
1.小数定点机:小数点的位置约定在符号位之后
2.整数定点机:小数点的位置约定在最后

2.原码表示法

1)定义
整数
$$
[x]_原 = \begin{cases}0,x \quad \text {if {$2^n$>x>=0}} \2^n-x\quad \text {if {0>=x>-$2^n$};}
\end{cases}
$$
x为真值 整数的位数
例子:
x=+1110 $[x]_原=0,1110$
x=-1110 $[x]_原=2^4+1110=1,1110$
原码实际上是带符号的绝对值表示

小数
$$
[x]_原 = \begin{cases}x \quad \text {if {1>x>=0}} \1-x\quad \text {if {0>=x>-1};}
\end{cases}
$$
x为真值
x=+0.1101 $[x]_原=0.1110$
x=-0.1101 $[x]_原=1.1110$
原码小数点前的数字表示符号

原码的特点:简单、直观
使用原码的方式 同样是加法的操作,如果是一正一负相加实际就变成减法操作了
如果只做加法的运算,会提高计算机的效率

3.补码表示法 (重要)

补码就解决了加减法的归一化问题

一个负数加上 模 就得到该负数的补数
一个正数和一个负数互为补数时,它们绝对值之和即为模数
正数的补数即为其本身

整数
$$
[x]_补 = \begin{cases}0,x \quad \text {if {$2^n$>x>=0}} \2^n+x\quad \text {if {0>x>=-$2^n$(mod $2^{n+1}$)};}
\end{cases}
$$
x为真值, n是数据位的长度
x=+1010 $[x]_补=0,1010$
x=-1011000 $[x]_补=1,0101000$

小数
$$
[x]_补 = \begin{cases}x \quad \text {if {1>x>=0}} \2+x\quad \text {if {0>x>=-1 (mod 2)};}
\end{cases}
$$
x为真值
x=+0.1110 $[x]_补=0.1110$
x=-0.1100000 $[x]_补=1.0100000$
注意,小数是有长度的,需要按照存取长度进行截取或补零

求补码的快捷方式
当真值为负时,补码可用原码除了符号位每位取反,末位加1求得

4.反码表示法

当真值为负时,反码可用原码除了符号位每位取反得到

整数
$$
[x]_反 = \begin{cases}0,x \quad \text {if {$2^n$>x>=0}} \2^{n+1}-1+x\quad \text {if {0>=x>=-$2^n$(mod $2^{n+1}$-1)};}
\end{cases}
$$
x为真值, n是数据位的长度
x=+1010 $[x]_反=0,1010$
x=-1101 $[x]_反=1,0010$

小数
$$
[x]_反 = \begin{cases}x \quad \text {if {1>x>=0}} \2-2^{-n}+x\quad \text {if {0>x>=-1 (mod 2-$2^{-n}$)};}
\end{cases}
$$
x为真值
x=+0.1101 $[x]_反=0.1110$
x=-0.1101 $[x]_反=1.0010$
注意,小数是有长度的,需要按照存取长度进行截取或补零

三种机器数的小结

  • 最高位为符号位,书写上用,或者. 将数值部分和符号位隔开
  • 对于正数,原码=补码=反码
  • 对于负数,符号位为1,其数值部分 原码除符号位外每位取反末尾加1是补码 原码除符号位外每位取反是反码

5.移码表示法

补码表示很难直接判断其真值大小

$[x]_移 = 2^n+x (2n>x>=-2n)$
x是真值,n为整数的位数
x=10100 $[x]_移=1,10100$
x=-10100 $[x]_移=0,01100$
移码值给出了整数的定义,没有给出小数的定义

移码和补码的比较
移码和补码只相差一个符号位
$[+0]_移$ = $[-0]_移$
最小真值的移码为全0
用移码表示浮点数的阶码
能方便地判断浮点数的阶码的大小

二、数的定点表示和浮点表示

1.定点表示

小数点按约定方式标出
两种方式:
小数点在数符位置之后,在数值位置之前 小数定点机
小数点在数值位置之后 整数定点机

定点机 小数定点机 整数定点机
原码 $-(1-2{-n})$~$+(1-2)$ $-(2n-1)$~$+(2n-1)$
补码 $-1$~$+(1-2^{-n})$ $-2n$~$+(2n-1)$
反码 $-(1-2{-n})$~$+(1-2)$ $-(2n-1)$~$+(2n-1)$

2.浮点表示

为什么在计算机中要引入浮点数表示?

使用定点机编程,需要程序员自己调节小数点的位置,导致编程很困难
数的表示范围小,为了能表示两个大小相差很大的数据,需要很长的机器字长
数据存储单元的利用率往往很低,可能很多位存储的都是0

浮点表示的格式是什么?

$N=Sr^j$ 浮点数的一般形式
S 尾数 j阶码 r尾数的基值
计算机中r取2、4、8、16等
当r=2 $N=11.0101=0.110101
2{10}=1.10101*21=1101.01*2{-10}=0.00110101*2$
在计算机中S要求必须是小数,可正可负
j整数、可正可负
其中S小数点后第一位为1的数叫做规格化数

尾数和阶码的基值必须是2吗?基值的影响?

不用,可以是2的幂次

为什么要引入规格化表示?

可以使数据存储单元的利用率最高,尽可能保证数据的精度

目前浮点数表示格式的标准是什么?

1.浮点数的表示形式

$j_f j_1j_2...j_m S_f S_1S_2...S_n$
j是阶码 $j_f$是阶符 $j_1$~$j_m$是阶码的数值部分
S是尾数 $S_f$代表数的符号 $S_1$~$S_n$是阶码的数值部分
n其位数反映浮点数的精度
m其位数反映浮点数的表示范围
$j_f$和m共同表示小数点的实际位置

2.浮点数的表示范围

最小负数 $-2{(2m-1)}(1-2^{-n})$
最大负数 $-2{-(2m-1)}
(2^{-n})$
最小正数 $2{-(2m-1)}(2^{-n})$
最大正数 $2{(2m-1)}
(1-2^{-n})$

3.浮点数的规格化形式

r=2 尾数最高位为1
r=4 尾数最高2位不全为0
4=8 尾数最高3位不全为0

4.浮点数的规格化

r=2 左规 尾数左移1位,阶码减1
右规 尾数右移1位,阶码加1
r=4 左规 尾数左移2位,阶码减1
右规 尾数右移2位,阶码加1
r=8 左规 尾数左移3位,阶码减1
右规 尾数右移3位,阶码加1
基数r越大,可表示的浮点数的额范围越大
基数r越大,浮点数的精度降低

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

3.举例

4.IEEE 754标准

数符,阶码(含阶符),尾数
尾数为规格化表示
非0的有效位最高位为1(隐含)

符号位S 阶码 尾数 总位数
短实数 1 8 23 32
长实数 1 11 52 64
临时实数 1 15 64 80

三、定点运算

1.移位运算

1)移位运算数学意义

在数学中,我们说小数点向左还是向右移动
但在计算机中,小数点的位置是约定好的,一般说是数字相对小数点的左右移动
左移 绝对值扩大2倍
右移 绝对值缩小为原来的1/2
在计算机中,移位与加减配合,能够实现乘除功能

2)算数移位规则

1)符号位不变

码制 添补代码
正数 原码、补码、反码 0
负数 原码 0
负数 补码 左移添0
负数 补码 右移添1
负数 反码 1

3)算数移位的硬件实现

算数移位的硬件实现

4)算数移位与逻辑移位的区别

算数移位 有符号数的移位
逻辑移位 无符号数的移位

逻辑左移 低位添零,高位移丢
逻辑右移 高位添零,低位移丢

2.加减法运算

补码加减法运算的公式

1)加法
整数 $[A]_补+[B]_补=[A+B]_补 (mod 2^{n+1})$
小数 $[A]_补+[B]_补=[A+B]_补 (mod 2)$
2)减法
整数 $[A-B]_补=[A+(-B)]_补=[A]_补+[-B]_补 (mod 2^{n+1})$
小数 $[A-B]_补=[A+(-B)]_补=[A]_补+[-B]_补 (mod 2)$

溢出判断

1)一位符号位判溢出
参加操作的两个数(减法时即为被减数和"求补"以后的减数)符号相同,其结果的符号与原操作数的符号不同,即为溢出
硬件实现
最高有效位的进位 异或 符号位的进位 = 1 表示溢出
2)两位符号位判溢出 (溢出)
$$
[x]{补'} = \begin{cases}x \quad \text {if {1>x>=0}} \4+x\quad \text {if {0>x>=-1 (mod 4)};}
\end{cases}
$$
$[A]
+[B]{补'}=[A+B] (mod 4)$
$[A-B]{补'}=[A+(-B)]=[A]{补'}+[-B] (mod 4)$
结果的双符号位相同 未溢出
结果的双符号位不同 溢出
最高符号位 代表其真正的符号

补码加减法的硬件配置

补码加减法的硬件配置

3.乘法运算

计算机中怎么做二进制的乘法运算呢

笔算乘法的分析

笔算乘法的改进

乘法运算可用加和移位实现 n=4 加4次,移4次
由乘数的末尾决定被乘数是否与原部分积相加 然后右移1位形成新的部分积,同时乘数右移一位(末位丢失),空出高位存放部分积的低位

被乘数只与部分积的高位相加
ACC寄存器保存部分积的高位
MQ寄存器保存部分积的低位和乘数
需要三个寄存器 其中两个具有移位功能
一个全加器

原码的乘法运算

$[x]_原=x_0.x_1x_2...x_n$
$[y]_原=y_0.y_1y_2...y_n$
$[xy]_原=(x_0异或y_0).(0.x_1x_2...x_n)(0.y_1y_2...y_n)=(x_0异或y_0).x*y$
式中x^=0.x_1x_2...x_n
y^
=0.y_1y_2...y_n
乘积的符号位单独处理 x_0异或y_0
数值部分为绝对值相乘 x*y*

原码一位乘递归公式

补码的乘法运算

这个没讲

4.除法运算

笔算除法是怎么做的

如何用计算机硬件来模拟笔算除法的过程

笔算除法 机器除法
商符单独处理 符号位异或形成
心算上商 $x_{绝对值}-y_{绝对值}>0$上商1 $x_{绝对值}-y_{绝对值}<0$上商0
余数 不动 低位补'0' 减右移一位 的除数 余数左移一位 低位补0 减除数
2倍字长加法器 1倍字长加法器
上商位置不固定 在寄存器最末位上商

原码除法

小数
$[x]_原=x_0.x_1x_2...x_n$
$[y]_原=y_0.y_1y_2...y_n$
$[x/y]_原=(x_0异或y_0).(0.x_1x_2...x_n)/(0.y_1y_2...y_n)=(x_0异或y_0).x*/y*$

乘积的符号位单独处理 x_0异或y_0
数值部分为绝对值相乘 $x*y*$

约定 小数定点除法 $x*<y$ 整数定点除法 $x*>y$
被除数不等于0
除数不能为0

  • 恢复余数法
    余数为正 上商1 计算$2R_i-y^$
    余数为负 上商0,计算$R_i+y^
    $ 恢复余数
  • 加减交替法(不恢复余数法)
    第一次需要计算余数,后续就看上商的值来判断后续的操作
    上商1 计算$2R_i-y^$
    上商0 计算$2R_i+y^
    $

四、浮点四则运算

仅讲解了浮点数的加减法的运算
$x=S_x2^{j_x}$
$y=S_y
2^{j_y}$

对阶

在浮点数加减法操作中,首先要对阶,就是保证两个数的阶数相同
对阶原则
小阶向大阶看齐 原因:阶数增加,尾数向右移动,有数据丢失,也是低位只影响精度;阶数减小,尾数向左移动,有数据丢失,是高位引发错误

尾数求和

规格化

规格化的原则
原码 不论正数、负数,第一位数为1
补码 符号位和第一数为不同

左规:尾数左移一位,阶码减1,直到数符和第一数位不同为止
右规:当尾数溢出(>1)时,需右规 即尾数出现01.xxxx 或10.xxxx 尾数右移一位,阶码加1

舍入

在对阶和右规过程中,可能出现尾数末位丢失,引起误差,需考虑舍入

  1. 0舍1入法
  2. 恒置1法

溢出判断

设机器数为补码,尾数为规格化形式,并假设阶符取2位,阶码的数值部分取7位,数符取2位,尾数取n位,则该补码在shu

举例

五、算术逻辑单元

ALU电路

ALU 算术逻辑单元电路,ALU也就是运算器
ALU 有两个输入端$A_i,B_i$ 1个输出端$F_i$ 1个控制端$K_i$
$K_i$取不同的值输出也不相同

快速进位链

并行加速法

视频链接 https://www.bilibili.com/video/BV1WW411Q7PF?p=87&spm_id_from=pageDriver&vd_source=3c88fb7dae36f53e6a15081fb7cf9ff8 12分07秒

串行进位链

进位链 传送进位的电路
串行进位链 进位串行传送
以4位全加器为例 设与非门的级延迟时间为$t_y$
4位全加器产生进位的全部时间为$8t_y$
n位全加器产生进位的全部时间为$2nt_y$

并行进位链

以4位全加器为例 设与或非门的级延迟时间为$1.5t_y$,与非门的级延迟时间为$t_y$
4位全加器产生进位的全部时间为$2.5t_y$

1)单重分组跳跃进位链
n位全加器分若干小组,小组中的进位同时产生,小组与小组之间采用串行进位
单重分组跳跃进位链
n组全加器产生进位的全部时间为$2.5nt_y$
2)双重分组跳跃进位链
n位全加器分若干大组,大组中又包含若干小组。每个大组中小组的最高进位同时产生。大组与大组之间采用串行进位
图我就不放了,感觉有点没听懂

posted @ 2023-05-21 22:35  Oh,mydream!  阅读(172)  评论(0编辑  收藏  举报