【学习笔记】计算机组成原理(六)

计算机的运算方法

在这里插入图片描述

6.1 无符号数和有符号数

6.1.1 无符号数

只有数值部分,没有符号位,转成二进制,然后用计算机的寄存器/存储器按照规定的长度保存在计算机当中。
如果是保存在寄存器中,则寄存器的位数反映了无符号数的表示范围。

在这里插入图片描述

6.1.2 有符号数

有正负号的数,数据分为符号部分和数值部分。

6.1.2.1 机器数与真值
  • 机器数:保存在计算机当中的数称为机器数。

    • 真值在计算机中保存要保存三部分:数字的符号,小数点的位置,数值位的值。
    • 在计算机当中,符号 要数值化,用数据表示符号。计算机用高、低电平表示0、1,即用0、1来代表数字的符号。符号位是以约定的形式给出,假设最高位或者寄存器的最左端。
    • 在计算机中,没有专门的硬件表示小数点,计算机当中的 小数点都是以约定的形式给出,比如说放在符号位的后面(如:+0.1011、-0.1011),或者是数值位的最后(如:+1100、-1100)。
    • 计算机按照 小数点的位置 可以分为小数定点机(放在符号位的后面)和整数定点机(放在数值位的最后)。
  • 真值:程序使用的数据的真实的值,带有正负号。

    在这里插入图片描述

6.1.2.2 原码表示法

在这里插入图片描述

注意:2n > x 是因为n位的数最大能表示的是2n − 1 ,x > − 2n 同理。

在这里插入图片描述

原码优缺点:

  • 优点:简单、直观

  • 缺点:正负数加减会出现问题。

    在这里插入图片描述

6.1.2.3 补码表示法
  • 补数的概念

    在这里插入图片描述

  • 补码定义

    在这里插入图片描述

  • 补码缺点

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

6.1.2.4 反码表示法

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

6.1.2.5 移码表示法

移码只给出了整数定义,没有给出小数定义,这和移码在计算机的数据表示当中的作用有关。因为移码通常用来表示浮点数据表示的阶码部分,阶码都是整数,所以移码的定义当中也只给出整数形式的定义。

在这里插入图片描述

在这里插入图片描述

6.2 数的定点表示和浮点表示

6.2.1 定点表示

小数点固定在某一位置的数为定点数(小数点按约定的方式标出),有以下两种格式。

  • 小数点的位置约定在数符的后面,表示计算机当中,存放的定点数都是小数(如果是补码形式的话,可以表示的唯一的一个整数就是 -1)。

  • 小数点的位置约定在数值部分的后面,表示计算机中的定点数都是整数。

在这里插入图片描述

6.2.2 浮点表示

6.2.2.1 浮点数的表示形式

N = S × rj

S − 尾数 |S| ≤ 1 是小数,可正可负,代表浮点数的正负

j − 阶码 是整数,可正可负

r − 尾数的基值 r取2、4、8、16等

在这里插入图片描述

在这里插入图片描述

6.2.2.2 浮点数的表示范围

在这里插入图片描述

例子:

在这里插入图片描述

6.2.2.3 浮点数的格式化形式

基数不同,浮点数的规格化形式不同

  • r=2(1位2进制数) 尾数最高位为1(真值=1)

  • r=4(2位2进制数) 尾数最高2位不全为0

  • r=8(3位2进制数) 尾数最高3位不全为0

6.2.2.4 浮点数的格式化

在这里插入图片描述

在这里插入图片描述

6.2.3 机器零

在这里插入图片描述

6.2.4 IEEE754标准

在这里插入图片描述

6.3 定点运算

6.3.1 移位运算

6.3.1.1 移位运算的数学意义

在这里插入图片描述

6.3.1.2 算术移位的规则
码 制添补代码
正 数原码、补码、反码0
负 数原码0
负 数补码左移 右侧添0
负 数补码右移 左侧添1
负 数反码1

① 机器数为正时,不论是左移还是右移,添补代码均为0。

②由于负数的原码数值部分与真值相同, 故在移位时只要使符号位不变,其空位均添0即可。

③由于负数的反码各位除符号位外与负数的原码正好相反,故移位后所添的代码应与原码相反,即全部添1。

④分析任意负数的补码可发现,当对其由低位向高位找到第一个“1”时,在此“1”左边的各位均与对应的反码相同,而在此“1”右边的各位(包括此“1”在内)均与对应的原码相同。故负数的补码左移时,因空位出现在低位,则添补的代码与原码相同,即添0;右移时因空位出现在高位,则添补的代码应与反码相同,即添1。

负数补码举例:

x = -0.x1x2…xk100000

[x] = 1. x1 ‾ \overline{\text{x1}} x1 x2 ‾ \overline{\text{x2}} x2 xk ‾ \overline{\text{xk}} xk 100000

[x]左移2位 = 1. x3 ‾ \overline{\text{x3}} x3 x4 ‾ \overline{\text{x4}} x4 xk ‾ \overline{\text{xk}} xk 100000 00

[x]右移2位 = 1.11 x1 ‾ \overline{\text{x1}} x1 x2 ‾ \overline{\text{x2}} x2 xk ‾ \overline{\text{xk}} xk 1000

在这里插入图片描述

6.3.1.3 算术移位的硬件实现

在这里插入图片描述

6.3.1.4 算术移位和逻辑移位区别

算术移位:符号不动,移动数值位,是有符号数的移位。
逻辑移位:无符号数移位,所有位都会参加移位运算。

在这里插入图片描述

6.3.2 加减法运算

6.3.2.1 补码加减法运算的公式

在这里插入图片描述

6.3.2.2 溢出的判断

溢出情况:

  • 对于加法,只有在正数加正数和负数加负数两种情况下才可能出现溢出,符号不同的两个数相加是不会溢出的。
  • 对于减法,只有在正数减负数或负数减正数两种情况下才可能出现溢出,符号相同的两个数相减是不会溢出的。

(1)用一位符号位判断溢出:

  • 原则:

    由于减法运算在机器中是用加法器实现的,因此: 不论是作加法还是减法只要实际参加操作的两个数(减法时即为被减数 和 “求补”以后的减数)符号相同,结果又与原操作数的符号不同,即为溢出。

  • 硬件实现:

    通常用符号位产生的进位与最高有效位产生的进位异或操作后,按其结果进行判断。

    • 异或结果为1, 即为溢出;
    • 异或结果为0, 则无溢出。

在这里插入图片描述

(2)用两位符号位判断溢出

在这里插入图片描述

  • 原则:

    当2位符号位不同时,表示溢出,否则,无溢出。不论是否发生溢出,高位(第1位)符号位永远代表真正的符号。

在这里插入图片描述

6.3.2.3 补码加减法的硬件配置

在这里插入图片描述

6.3.3 乘法运算

6.3.3.1 分析笔算乘法

在这里插入图片描述

6.3.3.2 笔算乘法的改进

在这里插入图片描述

在这里插入图片描述

被乘数放在X寄存器当中,乘数放在乘商寄存器(MQ)当中,乘法的累加值的高位放在ACC寄存器中,ACC的值随着右移加长,低位被移到了MQ当中,MQ当中保存的乘数也在逐渐的进行右移,每一次移位操作,都会把运算过的最低位移丢,通过新的最低位判断是否需要加上被乘数。
被乘数只是和部分积的高位相加,即只和ACC保存的数据相加。

硬件上需要三个寄存器,其中两个要具有移位功能,一个用于保存被乘数(需要一直被保存),一个全加器

  • X寄存器保存被乘数
  • ACC保存乘积的高位
  • MQ存放乘积的低位和剩余的乘数。ACC、MQ需要具有移位功能
  • 一个全加器,实现被乘数和部分积的高位相加的操作,需要n+1位。
6.3.3.3 原码的乘法运算
  • 原码一位乘运算规则

    在这里插入图片描述

    在这里插入图片描述

  • 原码一位乘所需的硬件配置

    在这里插入图片描述

  • 原码一位乘控制流程

    在这里插入图片描述

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

    在这里插入图片描述

    ⭐️ 校正法例题

    在这里插入图片描述

    ⭐️ Booth例题

    在这里插入图片描述

  • 补码比较法(Booth 算法)所需的硬件配置

在这里插入图片描述

  • 补码比较法(Booth 算法)控制流程

    在这里插入图片描述

6.3.4 除法运算

6.3.4.1 分析笔算除法

在这里插入图片描述

6.3.4.2 原码除法

在这里插入图片描述

  • 恢复余数法

    在这里插入图片描述

  • 加减交替法

    加减交替法又称不恢复余数法

    在这里插入图片描述

    在这里插入图片描述

在这里插入图片描述

6.3.4.3 补码除法

补码除法也分恢复余数法和加减交替法,后者用得较多。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

6.4 浮点四则运算

6.4.1 浮点加减运算

x = Sx ⋅ 2 j x, y = Sy ⋅ 2 j y

两个浮点数如果要进行加减法运算的话,他们的阶或者是指数,必须是相同的。

如果在基值相同的情况下,阶码不同,就需要对阶码的值进行调整,在调整阶码的值的时候,尾数的值也需要进行调整。通过阶码和尾数两部分的调整,保证参与运算的数据真值大小不发生变化,依然是原来参加运算的数据的值。

6.4.1.1 对阶
  • 求阶差

    在这里插入图片描述

6.4.1.2 尾数求和
6.4.1.3 规格化

在这里插入图片描述

01.XXX…X真正的符号位是0,两个正数相加就有可能造成这种溢出,尾数右移一位,阶码加1,将溢出的进位重新放回尾数中,可能会影响精度。

在这里插入图片描述

6.4.1.4 舍入

数据的长度超过了计算机当中存储数据的物理器件能够保存的数据的长度,因此低位部分就要被处理,保证数据能够以比较精确的保存在计算机当中。在对阶和右规过程中,都可能出现尾数末尾丢失,引起误差,为尽可能减少误差,需考虑舍入。

(1) "0舍1入"法

类似于十进制数运算中的“四舍五入”法

即在尾数右移时,被移去的最高数值位为0,则舍去;

被移去的最高数值位为1,则在尾数的末位加1。

这样做可能使尾数又溢出此时需再做一次右规。

(2) "恒置1"法

尾数右移时,不论丢掉的最高数值位是“1”或“0”,都使右移后的尾数末位恒置“1”。

这种方法同样有使尾数变大和变小的两种可能。

在这里插入图片描述

6.4.1.5 溢出判断

在这里插入图片描述

6.4.2 浮点乘除法运算

👉 阶码运算
在这里插入图片描述

👉 尾数运算
在这里插入图片描述

👉 浮点乘法例题

在这里插入图片描述

👉 浮点除法例题

在这里插入图片描述

6.5 算术逻辑单元

6.5.1 ALU电路

在这里插入图片描述

在这里插入图片描述

6.5.2 快速进位链

6.5.2.1 并行加法器

每位全加器的进位输出是高一位全加器的进位输入,因此当全加器有进位时,这种级一级传递进位的过程将会大大影响运算速度。

在这里插入图片描述

6.5.2.2 串行进位链

在这里插入图片描述

6.5.2.3 并行进位链(先行进位,跳跃进位)

存在问题:电路比较复杂

在这里插入图片描述

6.5.2.4 单重分组跳跃进位链

在这里插入图片描述

6.5.2.5 双重分组跳跃进位链

👉 基本思路

在这里插入图片描述

👉 大组进位分析

在这里插入图片描述

参考:
教材:计算机组成原理 (唐朔飞).pdf
视频:
https://www.bilibili.com/video/BV1t4411e7LH/?p=93&spm_id_from=333.880.my_history.page.click&vd_source=a89593e8d33b31a56b894ca9cad33d33
https://www.bilibili.com/video/BV1wv4y1672L/?p=71&spm_id_from=pageDriver

  • 23
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值