计组笔记(二)——运算方法与运算器

运算方法与运算器

定点数运算

加减运算

补码加减运算规则

  1. 参加运算的操作数用补码表示;

  2. 补码的符号位与数值位同时进行加运算:

    加:两数补码直接相加;

    减:对减数补码再求补(减数补码连同符号位一起按位取反,末位加1),再与被减数的补码相加。

    运算结果即为和/差的补码。

  • 什么情况下会发生溢出?

    当两个同符号数相加或两个异符号数相减,运算结果可能会发生溢出;

    当两个同符号数相减或两个异符号数相加,运算结果一定不会发生溢出;

  • 课堂习题

    image-20210817212455344
  • 如何判断是否发生了溢出?

    1. 双符号位判决法;
    2. 进位判决法;
    3. 根据运算结果的符号位和进位标志判别;
    4. 根据运算前后的符号位进行判别。
  • 双符号位判别法

    前提:两个n位数的加减运算结果用一个n+1位数一定能够正确表示

  • 进位判别法

    Cn-1为数值位最高位向符号位的进位,Cn位符号位向更高位的进位,二者不相等则发生溢出。

电路基本原理

image-20210820214606425 image-20210820214917735

优先级:与>或(类比乘法、加法)

A(C+D) = AC+ AD ——分配律

ABC=A(BC) ——结合律

A+B+C=A+(B+C) ——结合律

一位全加器

  • 进位产生函数:Zi=Xi⊕Yi⊕Ci
  • 进位传递函数:Ci+1=(Xi·Yi)+(Xi ⊕ Yi)·Ci

Zi是全加器的结果,它的值取决于两个加数Xi,Yi和来自低位的进位Ci三者异或的结果;

Ci+1是向更高位的进位,中间是个或,左右两个条件只要有一个条件为真,那么进位就是高电平1:

  1. (Xi·Yi)为真,表示两个加数全为1,那么自然要向高位进位;
  2. (Xi ⊕ Yi)·Ci,表示两个加数异或的结果再与来自低位的进位相与,即两个加数只要有一个为1,并且Ci为1,那么就要向高位进位。
  • 一位全加器的框图及其电路图(背)

    image-20210820222403342

n位全加器

行波进位加法器

将上述n个一位全加器串在一起:

image-20210820222642729 image-20210820223444485
  • n位加法器最长的信号通通路,电路要经过2n+1个门

  • 优点:电路简单,扩展容易

  • 缺点:进位由低位向高位逐位产生,延时高,速度相对较慢

  • 通过控制M的输入可以实现加减法切换,前提是X和Y都要用补码表示。

先行波进位加法器

在进行加法运算前,先将各位全加器需要的进位计算出来,可以大大加快加法运算的速度。但是随着位数的增加,电路会越来越复杂。

实际设计加法器时,会采取行波进位加法器和先行波进位加法器互相结合的模式。

BCD加法运算

四位二进制数表示十进制一位数,把四位二进制数为一组(即一位BCD数)来算,最后判断是否需要校正:

  1. 某位BCD数(两个四位二进制数)相加的结果大于9

  2. 某位BCD数需要向更高位进位

则对每一位BCD结果进行+6(0110)修正。注意,以上条件只需要满足一个就要修正。

image-20210821002011599

移码的加减运算

  • 求[X+Y]

    1. 写出X和Y
    2. X+Y
    3. 符号位取反
  • 求[X-Y]

    关键是求[-Y],和补码求相反数一样,直接对[Y]求补即得[-Y],让后按照加法运算

乘法运算

原码乘法运算

原码一位乘法
  • 符号位:两个数的符号位相异或

  • 数值位:两个数的绝对值的数值位之积

  • [X] × [Y]=(X0 ⊕ Y0 )(|X|×|Y|)

  • 两个4位二进制数相乘用8位表示

  • 原码一位乘法的运算过程(表格要会画,会考大题)

    image-20210821213613447
原码二位乘法

待自学

补码乘法运算

  • 补码的一位乘法运算规则

    image-20210821213855858
  • 布斯(Booth)法(要会画图)

    1. 乘数与被乘数均用补码表示,连同符号位一起参加运算;运算结果(乘积)也是补码。

    2. 乘数最低位后增加一个附加位(可用A-1表示),初始设定为0。

    3. 从附加位开始,按上表总共进行n次加操作、n-1次右移操作(最后一次不右移)。

    4. 右移按补码规则进行,即符号位复制。

      image-20210821220528638
  • 举例

步骤:

  1. 先写出[X],[Y],以及[-X]
  2. 画图,两位符号位用来防止溢出,寄存器D初始值(包含符号位)为00 0000,寄存器A里面放乘数Y(包含1位符号位,共5位),附加位A-1初始值为0
  3. 后项-前一项,即0-1=-1,按照上述规则,要加[-X],同时DA右移1位,高位补符号位
  4. 重复3,直到A中的5位数全部计算完成,最后符号位计算完之后不用移位
  5. 结果数值位就是取DA中的八位:0111 1110,加上一位符号位,即1.0111 1110

阵列乘法器

image-20210821233103153

答案:C

除法运算

原码除法运算

原码除法法则
image-20210823211025274
恢复余数法

在CPU中,必须减过之后方能判断余数是否够减,当发现不够减时,在下面操作之前必须恢复余数。

这里的减|Y|是通过+[-|Y|]实现的。

例:被除数 X=-0.10001011,除数 Y=0.1110,利用原码恢复余数法求商及余数。

解:前提条件:|X|<|Y|,|Y|≠0。[X]原=1.10001011,[Y]原=0.1110,[-|Y|]补=1.0010,商符=1⊕0=1。
绝对值除法过程:

image-20210823211247150

看符号位是0还是1来判断是否够减。

缺点:不同的被除数和除数,其除的过程不规范,何时需恢复余数是不相同的,实现起来不便于控制。

加减交替法
  • 法则:

    image-20210823211626252
  • 例题:

    image-20210823212623783

    求出[X],[Y],[|Y|],[-|Y|]

  • 例题

    image-20210823233926639 答案:ABE

算数逻辑单元

了解

运算器的结构

image-20210824211957290

单总线结构一次操作需要3个步骤,双总线2个,三总线1个。

单总线结构必须有2个暂存器,双总线1个,三总线0个。

  • 例题
image-20210824212425950

答案:B

  • 例题

    image-20210824215303651 答案:B
  • 计算机框图

    image-20210824215431531

    虚线框起来的部分是CPU

    S,T是ALU的两个暂存器

    CB控制总线

    AB地址总线

    DB数据总线

    SP,BP,SI,DI,AX,BX,CX,DX,8个通用寄存器

    AR地址寄存器

    DR数据寄存器

    PC程序计数器

    PSW标志寄存器

    IR指令寄存器

浮点数运算

浮点数加减运算

  1. 对阶

    为了尽量减小精度损失,采取:小阶对大阶,即小阶码+1,尾数右移1位,直到增大到与大阶码相同。

  2. 尾数加减运算

    加减法统一为加法:减法时,对减数求补,然后与被减数相加。

  3. 规格化

    • 左规:运算结果尾数为:11.1xx…x 或 00.0xx…x:尾数每左移1位,阶码减1,直到使尾数成为规格化数为止。

      阶码减1,必须同时判断是否下溢。若发生下溢,可认为结果为0。

    • 右归:若结果(尾数)发生溢出,即结果出现10.XX…X 或01.XX…X 时,尾数右移1位,阶码加1。右规最多1次。

      阶码加1,必须同时判断是否上溢。若发生上溢,可认为结果为∞。

  4. 舍入处理

    • 截(尾)断法

      将需丢弃的尾数低位丢弃;

    • 末位恒置1法

      使要保留的尾数的最低位永远为1;

    • 0舍1入法

    当尾数右移丢弃的是1时,要保留的尾数最末位加1;

    当尾数右移丢弃的是0时,要保留的尾数最末位不变。

    当遇到01.111…11这种需右规的尾数时,采用此法会再次使尾数溢出。遇到这种情况可采用截尾法。

  • 例题:例3.18(极有可能考大题)

  • 例题

    image-20210824222250944

答案:D

浮点数的溢出由阶码决定:

当阶码小于-2m-1时(阶码用m位补码表示),发生下溢出,此时可认为结果为0

当阶码大于+2m-1时(阶码用m位补码表示),发生上溢出,此时可认为结果为无穷大。

浮点数乘除运算

  • 浮点乘法运算

    <img src=“https://s2.loli.net/2022/04/05/E3cPK9zYsVaT1kt.png” alt=“image-20210830223149033” style="zoom: width=“67%”/>

  • 浮点除法运算

    image-20210830223234647
  • 例题(尾数用原码表示)

    image-20210830211246451

    分析:

  1. 只有当运算结果尾数向上溢出时需要右归,但时n位二进制的加减法结果用n+1位数一定能表示,所以最多需要右归1次。但是如果两个数的绝对值非常接近,他们做加减运算时,结果可能非常小,需要左归很多次,但是不会超过n-1次。
  2. 规格化原码的表示范围是1/2<=|M|<1,两个小于1的数相乘,结果也是小于1,结果不会超过1,所以不需要右归。当两个数的绝对值都是1/2时,这个时候乘法的结果最小,绝对值为1/4,0.0100000…,也之需要左归一次。
  3. 不需要左归,除以一个小于1的数,结果会越除越大,不会比被除数小,所以不需要左归。考虑极端情况,1÷1/2=2,10.000000…,也只需要右归一次。
  • 例题

    image-20210830211410835

    答案:B

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值