zoukankan      html  css  js  c++  java
  • 第三章运算方法和运算部件预习

    3.1高级语言和机器指令中的运算

    3.1.1 C程序中涉及的运算

    1.按位运算:符号|表示按位OR运算;符号&表示按位AND运算;符号~表示按位NOT运算;符号^表示按位XOR运算。
    2.逻辑运算:符号||表示按位OR运算;符号&&按位AND运算;符号!表示按位NOT运算。
    3.移位运算:有逻辑移位和算术移位两种。逻辑移位不考虑符号位,总是把高(低)移出,低(高)位补0。
    4.位扩展和位截断运算:进行数据类型转换时,如果遇到一个短数向长数转换,就要进行位扩展运算。进行位扩展运算时,扩展后的数值应保持不变。有两种位扩展方式:0扩展和符号扩展。

    3.1.2 MIPS指令中涉及的运算

    MIPS指令系统涉及的运算有按位逻辑运算、逻辑移位、算数移位、带符号整数的加减乘除、无符号整数的加减乘除、带符号整数的符号扩展、无符号数的0扩展、单精度浮点数加减乘除、双精度浮点数加减乘除。

    3.2基本运算部件

    基本的运算部件是加法器、ALU和移位器、ALU的核心部件是加法器。

    3.2.1 串进位加法器

    全加器用来实现两个本位数加上低位进行生成一位本位以及一位向高位的进位。第i位的加法运算是指第i位的加数Xi、Yi和低位来的进位Ci-1三者相加,得到本体和Fi和第i位的进位输出Ci。

    Fi、Ci分别被称为全加和 和 全加进位。
    Ci-1到Ci的延迟是两级门。




    串行进位加法器速度慢的主要原因是进位按串行方式传递,高位进位依赖低位进位,高位进位依赖低位进位。

    3.2.2 并行进位加法器




    3.2.3 带标志加法器

    n位无符号数加法器只能用于两个n位二进制数相加,不能进行无符号整数的减法运算,也不能进行带符号整数的加减法运算。要进行上述运算,需要在无符号数加减法器的基础上增加相应的逻辑门电路,使得加法器不仅能计算和差,还能够生成相应的标志信息。

    3.2.4 算数逻辑部件

    ALU是一种进行多种算术运算与逻辑运算的组合逻辑电路,其核心部件是带标志加法器,多采用先行进位方式。


    ALU能实现左/右移一位和两位的操作,也可以用一个移位寄存器实现移位。这两种方式每次只能固定移动一位或两位。
    若要一次移动若干位,通常用一个做ALU之外的桶型移位器实现。其可以简化ALU控制逻辑,也能实现移位操作和ALU操作的并行性。

    3.3定点运算

    3.3.1 补码加减运算


    补码加减运算部件

    可通过标志信息来区分带符号整数运算结果和无符号整数运算结果。
    零标志ZF=1表示结果F为0,不管作为无符号还是带符号整数来运算,ZF都有意义。
    符号SF表示结果的符号,即F的最高位。对于无符号数运算,SF没有意义。
    CF表示无符号加减运算时借进位。加法时CF=1表示溢出,减法时CF=1表示借位。对于带符号整数运算,CF没有意义。
    溢出标志OF=1表示带符号整数运算时结果发生了溢出。对于无符号整数运算,OF没有意义。
    对于n位补码整数,它可表示的数值范围位-2(n-1)~2(n-1)-1。

    3.3.2 原码加减运算

    1.比较两个操作数的符号,对加法实行“同号求和,异号求差”,对减法实行“异号求和,同号求差”。
    2.求和时,数值位相加,若最高位产生进位则结果溢出。和的符号位取被加数(被减数)的符号。
    3.求差时,被加数(被减数)数值位加上加数(减数)数值位的补码。

    3.3.3 移码加减运算


    移码的和、差等于和、差的补码。

    3.3.4 原码乘法运算

    1.原码一位乘法
    a.确定乘积的符号位,由两个乘数的符号异或得到。
    b.计算乘积的数值位,乘积的数值部分为两个乘数的数值部分之积。
    2.原码二位乘法
    对乘数的每两位取值情况进行判断,使每步求出对应于该两位的部分积,则可将乘法速度提高一倍

    3.3.5 补码乘法运算

    1.补码一位乘法
    布斯乘法:将符号位和数值位合在一起参与运算,直接得出用补码表示的乘积,且正数和负数同等对待。
    补码乘法运算规则:
    a.乘数最低位增加一位辅助位Y(-1)=0。
    b.根据Y(i) Y(i-1)的值,决定是“+[x]补”、“-[x]补”还是“+0”。
    c.每次加减后,算术右移一位,得到部分积。
    d.重复(2)(3)步n次,结果得[x*y]补。
    在布斯乘法中,遇到连续的1或连续的0时,可以跳过加法运算直接进行右操作。
    2.补码两位乘法

    3.3.6 快速乘法器

    1.阵列乘法器时采用硬件叠加或流水处理的快速乘法器件。
    2.阵列乘法器结构规范,标准化程度高,有利于布局布线,适用超大规模集成电路实现,且能获得较高的运算速度。
    3.阵列乘法器至少要做O(N)次加法,速度较慢。为了进一步提高速度,部分积求和电路可采用树形结构。

    3.3.7原码除法运算

    只有当被除数和除数都不为0,并且商也不可能溢出时,才能进一步进行除法运算。
    原码除法运算与原码乘法运算一样,要将符号位和数值位分开来处理,商的符号为相除两数符号的“异或”值,商的数值为两数绝对值之商。

    1.恢复余数除法
    a.符号位单独处理,分别取除数和被除数绝对值进行运算(和原码两位乘一样,参与运算的是绝对值的补码)。
    b.若余数(被除数)为正,表示够减,商上1,左移一位,减去[ y ] 补 [y]_补[y] 补 若余数(被除数)为负,表示不够减,商上0,恢复余数(加上除数),左移一位,加上[ − y ] 补 [-y]_补[−y] 补。
    c.重复上一步骤n次(需设置一个计数器)。
    d.若最后一步余数为负,需要恢复余数,否则不需要。
    2.不恢复余数除法
    与恢复余数法的区别:若余数(被除数)为负,表示不够减,商上0,恢复余数(加上除数) ,左移一位,加上[-y]_补 , 加上[ y ] 补 [y]_补[y] 补
    ​###3.3.8 补码除法运算
    首先要对被除数和除数取值、大小等进行相应的判断,以确定除数是否为0,商是否为0,是否溢出。
    根据被除数(中间余数)与除数之间符号的异同或差值的正负来确定下次做减法还是加法。
    1.补码恢复余数除法
    a.够键则上商为1,不够减则上商为0。
    b.若商为负值,则“各位取反,末位加1”来取得真正的商。
    2.补码不恢复余数法
    a.对于小数补码运算,商等于“-1”是被允许的。
    b.n位小数补码除法共上商n+1次,移位n次,和原码除法一样。

    3.4 浮点数运算

    3.4.1 浮点数加减运算

    浮点数运算的特点是阶码运算和尾数运算分开来算。加减运算一律采用补码。
    1.对阶
    对阶的目的是让两个数小数点的位置看齐,使这两个数的阶码相等。
    2.尾数加减
    对阶后两个浮点数的指数相等,此时,可以进行对阶后的尾数相加减。
    3.尾数规格化
    尾数求和后的结果如果不是规格化数需要规格化,以双符号位运算为例的话,如果运算结果为正数,规格化的形式应该是00.1xxx......x,如果运算结果为负数,规格化后的形式应该是11.0xxx......x,不符合这种形式的数要进行左规或者右规的操作让其变成这种形式。
    4.尾数的舍入处理
    a.就近舍入。舍入为最近可表示的数。
    b.朝+∞方向舍入。总是取右边最近的可表示数。
    c.朝-∞方向舍入。总是取左边最近的可表示数。
    d.朝0方向舍入。直接截取所需位数,丢弃后面所有位。
    5.溢出判断
    溢出判断其实是在上述尾数规格化和尾数舍入过程中进行,只要涉及阶码求和/差,就可以在解码运算部件中直接用溢出判断电路来实现。
    a.右规和尾数舍入。
    b.左规。

    3.4.2 浮点数乘除运算


    1.浮点数乘法运算
    a.尾数相乘,指数相加。
    b.尾数规格化。
    c.尾数舍入处理。
    d.溢出判断。
    1.浮点数除法运算
    a.尾数相除,阶相减。
    b.尾数规格化。
    c.尾数舍入处理。
    d.溢出判断

    3.5 运算部件组成

    3.5.1 定点运算部件

    定点运算部件用来实现无符号整数和带符号整数的各种运算,一套完整的定点运算部件,除了核心部件ALU外,还需要有通用的寄存组、多路选择器、状态寄存器、移位器用来传送数据的数据中心线等。

    3.5.2 浮点运算部件

  • 相关阅读:
    HOWTO get multiple value from the same name checkbox elements or radiobution elements
    你家有几台电脑
    *qian翻
    nginx 域名绑定
    linode设置汇总
    how to relize 301 redirect on bottle
    Nginx禁止未在服务器绑定的域名访问
    linode设置汇总
    sogouq免费企邮
    linode设置汇总
  • 原文地址:https://www.cnblogs.com/zhangxueru/p/13773734.html
Copyright © 2011-2022 走看看