计算机组成原理(二)——数据的表示和运算


1. 数制与编码

1.1 字符与字符串

  • ASCII码
    • 通常用8bit表示一个字符,最高位都为0
    • 共128个字符。0-31、127为控制/通信字符;32-126为可印刷字符
    • 所有大写字母、所有小写字母、所有数字的编码都连续
  • 汉字
    • 区位码
    • 国标码 = 区位码 + 2020H
    • 汉字内码 = 国标码 + 8080H
    • 输入编码
    • 字型码
  • 字符串
    • 从低地址到高地址逐个字符存储,常采用’\0’作为结尾标志
    • 对于多字节的数据(如汉字),可采取大小端存储模式
    • 大端模式:将数据的最有效字节存放在低地址单元中
    • 小端模式:将数据的最有效字节存放在高地址单元中

1.2 数据的校验

  • 奇偶校验码

    • 在信息位的首部或尾部添加一个奇偶校验位

    • 校验原理
      由若干位代码组成的一个字叫码字,将两个码字逐位对比,具有不同的位的个数称为两个码字间的距离。
      一种编码方案可能有若干合法码字,各合法码字间的最小距离称为码距,用d表示。
      当d=1时,无检错能力:当d=2时,有检错能力:当d=3时,若设计合理,可能具有检错、纠错能力。

    • 奇校验码:整个校验码(有效信息位和校验位)中“1”的个数为奇数。

    • 偶校验码:整个校验码(有效信息位和校验位)中“1”的个数为偶数。
      偶校验的硬件实现:各信息进行异或(模2加)运算,得到的结果即为偶校验位。

  • 海明校验码

    • 具有1位纠错能力,两位检错能力
    • 设计思路
      将信息位分组进行偶校验一>多个校验位
      一>多个校验位标注出错位置
      需要多少校验位
    • 校验位 P i P_{i} Pi 放在海明位号为 2 i − 1 2^{i-1} 2i1 的位置上
    • 海明码求解步骤
      【例】在这里插入图片描述
    • 为了区分1位错和2位错,还需添加“全校位“列整体进行偶校位
  • 循环冗余校验码

    • 思想
      数据接收方和发送方约定一个“除数”,k个信息位和r个校验位作为“被除数”,添加校验位后需保证除法的余数为0,若余数非0则出错。
      左移(除数位数-1)位,模2减(异或)。
      对于确定的生成多项式,出错位与余数是相对应的。
      CRC码 = K个信息位 + R位余数。
    • 理论上可以证明循环冗校验码的检错能力有以下特点:
      1)可检测出奇数个错误
      2)可检测出所有双比特的错误
      3)可检测出所有小于等于校验位长度的连续错误
      4)K个信息位,R个校验位,若生成多项式选择得当,且 2 R ≥ K + R + 1 2^R\geq K+R+1 2RK+R+1 ,则RC码可纠正1位错。

2. 定点数的表示和运算

2.1 定点数的表示

  • 原码:一个符号位表示数据的正负, 0 代表正号, 1 代表 负号,其余的代表数据的绝对值。
  • 反码:正数的反码与原码相同,负数的反码是将数据位二进制位按位取反。
    原码和反码的真值0有两种表示。
  • 补码:正数的补码与原码相同,负数的补码是反码在最低位上加 1。
    补码的真值0只有1种表现形式。让减法操作转变为加法操作,节省硬件成本。
  • 移码:补码的基础上将符号位取反。注意:移码只能用于表示整数
    移码表示的整数很方便对比大小

若机器字长n+1位,原码和反码整数表示范围: − ( 2 n − 1 ) ≤ x ≤ 2 n − 1 -(2^n-1) ≤ x ≤ 2^n-1 2n1x2n1
若机器字长n+1位,原码和反码小数表示范围: − ( 1 − 2 − n ) ≤ x ≤ 1 − 2 − n -(1-2^{-n}) ≤ x ≤ 1-2^{-n} 12nx12n
若机器字长n+1位,补码整数的表示范围: − 2 n ≤ x ≤ 2 n − 1 -2^n ≤ x ≤ 2^n-1 2nx2n1(比原码多表示一个-2)
若机器字长n+1位,补码小数的表示范围 − 1 ≤ x ≤ 1 − 2 − n -1≤x≤1-2^{-n} 1x12n(比原码多表示一个-1)
若机器字长n+1位,补码整数的表示范围: − 2 n ≤ x ≤ 2 n − 1 -2^n ≤ x ≤ 2^n-1 2nx2n1(和补码一样)

  • x 补 x_{补} x − x 补 -x_{补} x的技巧:符号位、数值位全部取反,末位+1
  • 模 - a的绝对值 = a的补数

2.2 定点数的运算

  • 定点数的位移运算

    • 原码的算数移位一一符号位保持不变,仅对数值位进行移位。
    • 补码的算数移位一一正数的补码与原码相同,因此对正数补码的移位运算也和原码相同。
      右移:高位补0,低位舍弃。
      左移:低位补0,高位舍弃。
    • 负数补码的算数移位规则如下:
      右移(同反码):高位补1,低位舍弃
      左移(同原码):低位补0,高位舍弃。
  • 逻辑移位
    左移右移都补零,移出位舍弃。

  • 循环移位
    在这里插入图片描述

  • 原码定点数的加/减运算
    加法器直接对原码进行加法运算,可能出错

  • 补码定点数的加/减运算
    对于补码来说,无论加法还是减法,最后都会转变成加法,由加法器实现运算,符号位也参与运算定点数的乘/除运算;

  • 溢出概念和判别方法
    上溢:数的绝对值太大,以至大于数据编码所能表示的数据范围。
    下溢:数的绝对值太小,以至小于数据编码所能 表示的数据范围。
    只有“正数+正数”オ会上溢一一正+正=负
    只有“负数+负数”オ会下溢一一负+负=正
    符号位的进位 C s C_{s} Cs,最高数值位的进位 C 1 C_{1} C1。上溢:01;下溢:10
    即:G与C不同时有溢出.

  • 定点数的符号扩展

    • 定点整数的符号扩展
      在原符号位和数值位中间添加新位,正数都添0;负数原码添0,负数反、补码添1
    • 定点小数的符号扩展
      在原符号位和数值位后面添加新位,都添0;负数原、补码添0,负数反码添1
  • 乘法运算
    在这里插入图片描述

    • 原码的一位乘法
      1)符号单独处理:符号位=x异或y
      2)在正式进行乘法之前,AC置0
      3)当前位=1,则ACC加上被乘数;当前位=0,则ACC加上0
      4)统一逻辑右移(ACC+MQ),高位补0
      5)加上符号位
    • 补码的一位乘法
      符号位参与运算
      所有寄存器都统一用n+2位,因此采用双符号位补码运算
      1)辅助位初始为0。每次右移会使MQ的最低位顶替原本的辅助位(事实上MQ共n+2位)
      2)辅助位-MQ中最低位=1时,(ACC)+[X]补;辅助位-MQ中最低位=0时,(ACC)+0;辅助位-MQ中最低位=-1时,(ACC)+[-X]补
      3)补码的算数右移:符号位不动,数值位右移,正数右移补0,负数右移补1(符号位是啥就补啥)
  • 除法运算
    在这里插入图片描述

    • 原码除法:恢复余数法
      符号位与数值位分开处理
      1)会先默认上商1,如果余数为负再改上商0。并“恢复余数”。
      2)ACC、MQ整体“逻辑左移”ACC高位丢弃,MQ低位补0
    • 原码除法加减交替法(不恢复余数法)
      加减N+1或N+2次
      符号位与数值位分开处理
      1)被除数-|除数| = 新余数
      2)若余数为负,则可直接商0,让余数左移1位再加上|除数|,得到下一个新余数;
      3)若余数为正,则商1,让余数左移1位再减去|除数|,得到下一个新余数;
      4)若最终余数为负,需恢复余数
      余数的正负性与商相同。
    • 补码除法:加减交替法
      加减N+1次
      1)符号位参与运算:被除数/余数、除数采用双符号位
      2)被除数和除数同号,则被除数减去除数;异号则被除数加上除数。
      3)余数和除数同号,商1,余数左移一位减去除数;余数和除数异号,商0,余数左移一位加上除数。重复n次。
      4)商末位恒置1
  • 强制类型转换
    无符号数与有符号数:不改变数据内容,改变解释方式
    长整数变短整数:高位截断,保留低位。
    短整数变长整数:符号扩展。
    注:C语言中定点整数是用“补码”存储的

3. 浮点数的表示和运算

3.1 浮点数的表示

  • 浮点数位数的规格化:

    • 规格化浮点数:规定尾数的最高数值位必须是一个有效值。
    • 左规:当浮点数运算的结果为非规格化时要进行规格化处理,将尾数算数左移一位,阶码减1。
    • 右规:当浮点数运算的结果尾数出现溢出(双符号位为01或10)时将尾数算数右移一位,阶码加1。
  • 规格化浮点数特点

    • 正数的尾数的原码和补码表示范围: 1 2 ≤ M ≤ 1 − 2 − n \frac{1}{2}\leq M \leq 1-2^{-n} 21M12n
    • 负数的尾数的原码表示范围: − ( 1 − 2 − n ) ≤ M ≤ − 1 2 -(1-2^{-n})\leq M \leq -\frac{1}{2} 12nM21
    • 负数的尾数的补码表示范围: − 1 ≤ M ≤ − ( 1 2 + 2 − n ) -1\leq M \leq -(\frac{1}{2}+2^{-n}) 1M21+2n
    • 规格化的原码尾数,最高数值位定是1;规格化的补码尾数,符号位与最高数值位一定相反。
  • IEEE754标准
    E阶码部分,用移码表示,取值范围为:-126~127
    M尾数部分,用原码表示隐藏表示最高位1
    在这里插入图片描述
    一般浮点数可以表示为这样的形式(S为符号位,M为小数域的值,E为指数域的值): ( − 1 ) S × 1. M × 2 E − 127 (-1)^S \times 1.M \times 2^{E-127} (1)S×1.M×2E127
    长浮点数表示为: ( − 1 ) S × 1. M × 2 E − 1023 (-1)^S \times 1.M \times 2^{E-1023} (1)S×1.M×2E1023
    在这里插入图片描述

    • 当阶码E全为0,尾数M不全为0时,表示非规格化小数: ± ( 0. x . . . x x ) 2 × 2 − 126 \pm (0.x...xx)_2 \times 2^{-126} ±(0.x...xx)2×2126
      隐含最高位变为0,阶码真值固定视为-126。
    • 当阶码E全为0,尾数M全为0时,表示真值: ± 0 \pm0 ±0
    • 当阶码E全为1,尾数M全为0时,表示无穷大: ± ∞ \pm \infty ±
    • 当阶码E全为1,尾数M不全为0时,表示非数值:“NaN”( Not a Number)

3.2 浮点数的加/减运算

  • 浮点数加减运算步骤:
    • 对阶
      使两个数的阶码相等,小阶向大阶看齐。尾数毎右移一位,阶码加1。
    • 尾数加减
      通常采用双符号位表示尾数,这样可以挽救尾数溢出
    • 规格化
      左规:尾数最高数值位为无效位时,尾数左移,阶码减1
      右规:尾数双符号位不同时,尾数右移,阶码加1
    • 舍入
      • “0”舍“1”入法:类似于十进制数运算中的“四舍五入”法,即在尾数右移时,被移去的最高数值位为0,则舍去;被移去的最高数值位为1,则在尾数的末位加1。这样做可能会使尾数又溢出,此时需再做一次右规
      • 恒置“1”法:尾数右移时,不论丢掉的最高数值位是“1”还是“0”使右移后的尾数末位恒置“1”。这种方法同样有使尾数变大和变小的两种可能。
    • 判溢出

4. 算术逻辑单元ALU

4.1 串行加法器和并行加法器

  • 1位全加器的设计
    本位和: S i = A i ⊕ B i ⊕ C i − 1 S_{i}= A_{i} \oplus B_{i} \oplus C_{i-1} Si=AiBiCi1
    本位向高位的进位: C i = A i B i + ( A i ⊕ B i ) C i − 1 C_{i} = A_iB_i+(A_i \oplus B_i)C_{i-1} Ci=AiBi+(AiBi)Ci1
  • 串行加法器
    位全加器+进位触发器,只能一位一位地加
  • 串行进位的并行加法器
    多个全加器简单串联,可多位同时加;计算速度取决于进位产生和传递的速度
    串行进位又称为行波进位,每一级进位直接依赖于前一级的进位,即进位信号是逐级形成的。

4.2 算术逻辑单元ALU的功能和结构

在这里插入图片描述

  • 用4片74181芯片可以组成16位ALU,其片内进位是快速的,但片间进位是逐片传递的,即组内并行、组间串行,是单级先行进位。
  • 若把16位ALU中的每四位作为一组,将74181与74182芯片配合,用类似位间快速进位的方式来实现16位ALU,则能得到16位的两级线性进位ALU,即组内并行、组间并行,是二级先行进位。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值