计算机组成原理—运算器

第二章 数据的表示和运算

  • 2.1 数制与编码
    • 2.1.1 进位计数制及其相互转换
    • 2.1.2 *BCD编码
    • 2.1.3 定点数的编码表示
      • ⚫️定点数 VS 浮点数
      • ⚫️无符号数的表示
      • ⚫️有符号数的表示(原码、反码、补码、移码)
      • ⚫️原码、反码、补码、移码的作用
    • 2.1.4 整数的表示
  • 2.2 运算方法和运算电路
    • 2.2.1 基本运算部件
      • ⚫️一位全加器
      • ⚫️串行进位加法器
      • ⚫️并行进位加法器
      • ⚫️算数逻辑单元ALU
    • 2.2.2 定点数的移位运算
      • ⚫️算数移位
      • ⚫️逻辑移位
      • ⚫️循环移位
    • 2.2.3 定点数的加减运算
      • ⚫️补码的加减法运算
      • ⚫️补码加减运算电路
      • ⚫️溢出判别方法
    • 2.2.4 定点数的乘除运算
      • ⚫️乘法运算
        • 原码一位乘法
        • 补码一位乘法
      • ⚫️除法运算
        • 原码除法(恢复余数法)
        • 原码除法(加减交替法/不恢复余数法)
        • 补码除法(加减交替法)
    • 2.2.5 C语言类型转换
    • 2.2.6 数据的存储和排列
      • ⚫️“大端模式”和“小端模式”
      • ⚫️“边界对齐”
  • 2.3 浮点数的表示与运算
    • 2.3.1 浮点数的表示
      • ⚫️浮点数的表示格式
      • ⚫️*浮点数的表示范围
      • ⚫️浮点数的规格化
      • ⚫️IEEE754标准
      • ⚫️定点、浮点表示的区别
    • 2.3.2 浮点数的加减运算
      • ⚫️运算步骤(5步)

2.1 数制与编码

2.1.1 进位计数制及其相互转换

2.1.2 *BCD编码

2.1.3 定点数的编码表示

⚫️定点数 VS 浮点数

  • 定点数:小数点的位置固定;常规计数法

  • 浮点数:小数点的位置不固定;科学计数法

  • 定点数的表示:无符号数、有符号数

  • 通常用定点补码表示整数,定点原码表示小数,移码表示浮点数的阶码

⚫️无符号数的表示

  • 通常只有无符号整数,而没有无符号小数
  • 表示范围(8位二进制):28种状态,0000 0000~1111 1111,0~255

⚫️有符号数的表示(原码、反码、补码、移码)

  • 定点整数:符号位+数值部分(尾数)+小数点位置(隐含)

  • 定点整数:符号位+小数点位置(隐含)+数值部分(尾数)

  • 可用原码、反码、补码三种方式来表示定点整数和定点小数,还可用移码表示定点整数

  • 原码:用尾数表示真值的绝对值,符号位“0/1”对应“正/负”;真值0有+0和-0两种

  • 反码:若为正数,则反码与原码相同;若为负数,则数值位全部取反;真值0有+0和-0两种

  • 补码:若为正数,则补码与原码相同;若为负数,则为反码末位+1,即原码数值位取反+1(要考虑进位);真值0只有一种表现形式(0000 0000);定点整数补码1,000 0000表示-27,定点小数补码1.000 0000表示-1
    (负数补码转原码方法相同,尾数取反,末位+1)

  • 移码:补码的基础上将符号位取反;移码只能用于表示整数;真值0只有一种表示形式1000 0000

⚫️原码、反码、补码、移码的作用

  • 补码:让减法操作变为加法操作,ALU中无需集成减法器,节省硬件成本;执行加法操作时,符号位一起参与运算
  • 移码:表示的整数很方便对比大小

2.1.4 整数的表示

  • 无符号整数:可用无符号整数进行地址运算,或用它来表示指针
  • 无符号小数:计算机中的带符号整数都用补码表示

2.2 运算方法和运算电路

2.2.1 基本运算部件

⚫️一位全加器

  • 全加器(FA)是最基本的加法单元

(~P035 图3.5 一位全加器)

  • 逻辑表达式

(~P035 和表达式;进位表达式)

⚫️串行进位加法器

  • 只有一个全加器,数据逐位串行送入加法器中进行运算
  • 进位触发器用来寄存进位信号,以便参与下一次运算
  • (只能一位一位地加)

⚫️并行进位加法器

  • 把n个全加器串接起来,就可以进行两个n位数的相加
  • (可多位同时加)

⚫️算数逻辑单元ALU

  • 作用:算数运算、逻辑运算、辅助功能(移位、求补等)
  • 原理:ALU的核心是带标志加法器,同时也能执行“与”“或”“非”
  • 加法器的设计(门电路组合)

(~P037 图2.7 ALU的基本结构 图2.8 一位ALU的结构)

  • *奇偶校验码

2.2.2 定点数的移位运算

⚫️算数移位

  • 原码(符号位不变,仅对数值位移位)
    算数右移:除以基数的n次方;高位补0,可能丢失精读
    算数左移:乘以基数对n次方;低位补0,可能出现严重误差"
  • 反码:正数同原码,负数补1
  • 补码:正数同原码,负数补码中,最右边的1及其右边同原码,其余左边同反码(符号位不参与移位,左移补0,右移补1)

⚫️逻辑移位

  • 逻辑右移:高位补0,地位舍弃
  • 逻辑左移:地位补0,高位舍弃
  • (可看作是“无符号数”动算数移位)

⚫️循环移位

  • 适用于将数据的低字节数据和高字节数据互换

2.2.3 定点数的加减运算

⚫️补码的加减法运算

⚫️补码加减运算电路

  • 加法X+Y:按位相加
  • 减法X-Y:Y全部按位取反,末位+1,得到[-Y]补,减法变加法
  • (无符号数的加法/减法也可用该电路实现,但判断溢出的方式不同)

(~P040 图2.10 补码加减运算部件)

⚫️溢出判别方法

  • 溢出标志OF:溢出为1,否则置0(只对有符号数的加减)
    OF=最高位产生的进位 异或 次高位产生的进位
  • 符号标志SF:负为1,正为0(只对有符号数的加减)
    SF=最高位的本位和
  • 零标志ZF:=1结果为0,=0结果不为0
    ZF看两个运算结果的n bit是否全为0
  • 进位/借位标志CF:溢出为1,否则为0(只对无符号数的加减)
    CF=最高位产生的进位 异或 sub(sub=1减法,sub=0加法)

2.2.4 定点数的乘除运算

⚫️乘法运算

  • 实现思想:“累加—右移”,可分为原码一位乘法和补码一位乘法
原码一位乘法

(~课 2.2_6_1)

  • 进行n轮加法、移位
  • 每次加法可能+0、+[x]原,根据MQ的最低位
  • 每次移位是“逻辑右移”
  • ( 符号位异或运算; 小数和整数运算类似,仅小数点位置不同)
补码一位乘法
  • 进行n轮加法、移位,最后再多来一次加法
  • 每次移位是“补码的算数右移”
  • 每次加法可能+0、+[x]补、+[-x]补,根据辅助位-MQ的最低位
  • (被除数为双符号位补码;除数是单符号位补码,多一位辅助位;算数右移:正数00右移补0,负数11右移补1)

⚫️除法运算

  • 实现思想:“累加—左移”(逻辑左移),分为原码除法和补码除法
原码除法(恢复余数法)
  • 上商0/1,得到余数,余数末位补0(会先默认上商1,如果错误再商0,并恢复余数)
  • (如果余数为负数1,说明应该上商0;若一步动余数为负,也需要恢复余数并商0)
原码除法(加减交替法/不恢复余数法)
  • 若余数为负,可直接商0,并让余数左移1位再加上|除数|,得到下一个新余数
  • 若余数为正,则商1,让余数左移一位再减去|除数|,得到下一个新余数
补码除法(加减交替法)

(~课 2.2_7_2)

  • (符号位参与运算;被除数、余数、除数采用双符号位)
  • 若被除数和除数同号,被除数减去除数;若为异号,被除数加上除数
  • 若余数和除数同号,则商1,余数左移一位减去除数;若为异号,则商0,余数左移一位加上除数
  • 重复上一步n次,精度无要求用“末位恒置1”法

2.2.5 C语言类型转换

  • 有符号数和无符号数的转换:不改变数据内容,改变解释方式
  • 长整数变短整数:高位截断,保留低位

2.2.6 数据的存储和排列

⚫️“大端模式”和“小端模式”

  • 大端模式:便于人类阅读
  • 小端模式:便于机器处理,从最低有效字节LSB到最高有效字节MSB的顺序存储

⚫️“边界对齐”

  • 边界对齐:浪费了一些存储空间,但提高了取指令和取数的速度,访问一个字/半个字都只需一次访存
  • 边界不对齐:可充分利用存储空间,但访问一个字/半个字可能需要两次访存

2.3 浮点数的表示与运算

2.3.1 浮点数的表示

⚫️浮点数的表示格式

  • 数符:S 取值0或1
  • 阶码:E 常用补码或移码表示的定点整数,阶码的底通常为2(反映浮点数的表示范围及小数点的实际位置)
  • 尾数:M 常用原码或补码表示的定点小数(反映浮点数的精度)

⚫️*浮点数的表示范围

(~P061 图2.18 浮点数的表示范围)

⚫️浮点数的规格化

  • 规格化:通过调整一个非规格化浮点数的尾数和阶码的大小,使非零的浮点数在尾数的最高位上保证是一个有效值
  • 左规:尾数算数左移1位,阶码减1;进行多次,直到尾数最高位是有效值
  • 右规:当浮点数运算结果尾数出现溢出(双符号位为01或10时;此处采用“双符号位”,当发生溢出时可以挽救);尾数算数右移1位,阶码加1;只需要进行一次
  • 原码表示尾数的规格化:正数0.1…形式,负数1.1…形式
  • 补码表示尾数的规格化:正数0.1…形式,负数1.0…形式
  • (补码规格化时,算数左移,低位补0;算数右移,高位补1)"

⚫️IEEE754标准

  • 阶码:E 用移码表示,令偏置值=127D=0111 1111B(阶码1111 1111(-128)、0000 0000(-127)用做特殊用途,正常范围-126~127)

  • 尾数:M 用原码表示,隐藏表示最高位1,尾数真值为1.M

  • IEEE754标准规定常用浮点数格式有:短浮点数(单精度、float型)、长浮点数(双精度、double型)、临时浮点数

  • 短浮点数的真值为:(-1)Sx1.Mx2E-127

  • 长浮点数的真值为:(-1)Sx1.Mx2E-1023

(~P062 表2.4 IEEE754浮点数的格式)

⚫️定点、浮点表示的区别

  • 数值的表示范围:浮点数>定点
  • 精读:浮点数<定点
  • 数的运算:浮点数包括阶码和尾数的运算,并需规格化
  • 溢出问题:浮点数只有规格化后,阶码超出,才发生溢出

2.3.2 浮点数的加减运算

⚫️运算步骤(5步)

  1. 对阶:以小阶向大阶看起,尾数算数右移
  2. 尾数加减
  3. 规格化:左规/右规
  4. 舍入:0舍1入、恒置1法、截断法
  5. 判溢出:阶码超过两位,发生溢出

你可能感兴趣的:(考研)