跳至正文
wyaaaattwhoAI RESEARCH & ENGINEERING
← 返回首页

运算方法和运算部件

基本运算部件

高级程序语言涉及到的运算(C语言)

  • C语言基本的数据类型与运算类型
    • 基本数据类型
    • 基本运算类型:算术,按位,逻辑,移位,扩展和截断,匹配
  • 计算机如何实现高级语言程序中的运算?
    • 将各类表达式编译(转换)为指令序列
    • 计算机直接执行指令来完成运算
    • notion image
  • 数据的运算
    • 高级程序中涉及的运算
      • 整数算术运算,浮点数运算,按位,逻辑,移位,位扩展,位截断
        算术运算难实现
      notion image

串行进位加法器(CRA)

notion image
notion image

并行进位加法器(CLA)

notion image
notion image
  • 局部(单级)先行进位加法器
    • notion image
  • 多级先行进位加法器
    • notion image
      notion image
      notion image

带标志加法器

notion image

算数逻辑部件(ALU)

notion image
notion image
notion image

定点数运算

定点数加减运算

  • 原码加减运算
    • 用于浮点数尾数运算(注意:浮点数加减运算时,要先对齐阶码)
      • 符号位和数值部分分开处理
      • 仅对数值部分进行加减运算,符号位起判断和控制作用
    • 规则如下:
      • 比较两数符号,对加法实行“同号求和,异号求差”,对减法实行“异号求和,同号求差”。
      • 求和:数值位相加,和的符号取被加数(被减数)的符号。若最高位产生进位,则结果溢出。
      • 求差:被加数(被减数)加上加数(减数)的补码。
        • 最高数值位产生进位表明加法结果为正,所得数值位正确。
        • 最高数值位没产生进位表明加法结果为负,得到的是数值位的补码形式,需对结果求补,还原为绝对值形式的数值位。
      • 差的符号位
        • 情况下,符号位取被加数(被减数)的符号;
        • 情况下,符号位为被加数(被减数)的符号取反。
  • 补码加减运算
    • n位整数加减运算器
      • 先看一个C程序段: int x=9, y=-6, z1, z2; z1=x+y; z2=x-y; 问题:上述程序段中,x和y的机器数是什么?z1和z2的机器数是什么? 回答:
        因此,计算机中需要有一个电路,能够实现以下功能: 已知 [x]补 和 [y]补 ,计算[x+y]补 和 [x-y]补 。根据补码定义,有如下公式:
        notion image
        Cin对于做减法不可或缺, 等于那Sub的值补充了+1
        溢出问题
        加数类型
        符号位进位
        最高位进位
        是否溢出
        两个正数或一正一负
        0
        0
        0
        两个正数
        0
        1
        1
        两个负数
        1
        0
        1,变为正数,溢出
        两个负数
        1
        1
        0
        notion image
        notion image
        notion image
        notion image
        notion image
  • 移码加减运算
    • notion image

定点数乘法运算

  • 无符号数运算
    • 无符号数
      • notion image
        手工乘法的特点
        notion image
        计算机内部稍作以下改进:(i从右n向左1排列)
        notion image
        notion image
    • 32位乘法的运算实现
      • notion image
      • 被乘数寄存器X:存放被乘数
      • 乘积寄存器P:开始置初始部分积P0 = 0;结束时,存放的是64位乘积的高32位
      • 乘数寄存器Y:开始时置乘数;结束时,存放的是64位乘积的低32位
      • 进位触发器C:保存加法器的进位信号
      • 循环次数计数器Cn:存放循环次数。初值32,每循环一次,Cn减1,Cn=0时结束
      • ALU:乘法核心部件。在控制逻辑控制下,对P和X的内容“加”,在“写使能”控制下运算结果被送回P,进位位在C中
    • 无符号数举例
      • notion image
  • 原码乘法运算
    • 用于浮点数尾数乘运算
      • 符号与数值分开处理:符号位异或得到,数值用无符号乘法运算
        notion image
        这里采用的是一位乘法
    • 两位乘法
      • 一位乘法:每次只取乘数的一位判断,需n次循环,速度慢。
        两位乘法:每次取乘数两位判断,只需n/2次循环,快一倍。
        notion image
    • 举例
      • notion image
  • 补码乘法运算
    • 用于对什么类型数据计算?带符号整数!如int型
      notion image
      Booth算法的实质
      notion image
      例子
      notion image
      📌
      补码中也有两位运算
  • 快速乘法器

定点数除法运算

  • 先想想纸笔怎么算
    • notion image
      手算除法的基本要点
      ① 被除数与除数相减,够减则上商为1;不够减则上商为0。
      ② 每次得到的差为中间余数,将除数右移后与上次的中间余数比较。用中间余数减除数,够减则上商为1;不够减则上商为0。
      ③ 重复执行第②步,直到求得的商的位数足够为止。
  • 定点除法运算
    • 除前预处理
      • 若被除数=0且除数≠0,或定点整数除法时|被除数|<|除数|,则商为0,不再继续
      • 若被除数≠0、除数=0,则发生“除数为0”异常(浮点数时为∞)
      • 若浮点除法被除数和除数都为0,则有些机器产生一个不发信号的NaN,即“quiet NaN”
        • 只有当被除数和除数都≠ 0,且商≠ 0时,才进一步进行除法运算。
    • 计算机内部无符号数除法运算
      • 与手算一样,通过被除数(中间余数)减除数来得到每一位商,够减上商为1;不够减上商为0(从msb→lsb得到各位商)
      • 基本操作为减(加)法和移位,故可与乘法合用同一套硬件
    • 两个n位数相除的情况:
      • (1)定点正整数(即无符号数 )相除:在被除数的高位添n个0
        (2)定点正小数(即原码小数)相除:在被除数的低位添加n个0
        这样,就将所有情况都统一为:一个2n位数除以一个n位数
    • 第一次试商为1时的情况
      • 问题:第一次试商为1,说明什么?商有n+1位数,因而溢出!
      • 通常意义下,若是2n位除以n位的无符号整数运算,则说明将会得到n+1位的商,因而结果“溢出”(即:无法用n位表示商)。
        • 若是两个n位数相除,被除数高位扩展0,则第一位商为0,肯定不会溢出
        • 硬件实现
          • notion image
          • 除数寄存器Y:存放除数。
          • 余数寄存器R:初始时高位部分为高32位被除数;结束时是余数。
          • 余数/商寄存器Q:初始时为低32位被除数;结束时是32位商。
          • 循环次数计数器Cn:存放循环次数。初值是32,每循环一次,Cn减1,当Cn=0时,除法运算结束
          • ALU:除法核心部件。在控制逻辑控制下,对于寄存器R和Y的内容进行“加/减”运算,在“写使能”控制下运算结果被送回寄存器R。
        • 举例
          • notion image
        • 不恢复余数除法(加减交替法)
          • notion image
            notion image
      • 带符号数除法
        • 原码除法
          • 商符和商值分开处理
          • 商的数值部分由无符号数除法求得
          • 商符由被除数和除数的符号确定:同号为0,异号为1
          • 余数的符号同被除数的符号
        • 补码除法
          • 方法1:同原码除法一样,先转换为正数(类似原码表示),先用无符号数除法,然后修正商和余数。
          • 方法2:直接用补码除法,符号和数值一起进行运算,商符直接在运算中产生。

      浮点数运算