zoukankan      html  css  js  c++  java
  • 计算机组成原理--运算方法:加减乘除

    补码加减法

    补码加法
    公式:[x+y]补=[x]补+[y]补
    补码减法:
    为了将减法转变为加法,需证明公式: [x-y]补=[x]补+[-y]补 (证明)
    为了求得同时[-y]补,需要证明[-y]补=[y]补+2^-n(意义是[-y]补等于[y]补取反,末位加1)

    溢出检测

    • 溢出的检测
    • 可能产生溢出的情况
      • 两正数加,变负数,上溢(大于机器所能表示的最大数)
      • 两负数加,变正数,下溢(小于机器所能表示的最小数)

    定点原码乘法

    定点乘法原理

    n位乘n位积可能为2n位.
    乘积的最后是所有部分积之和,有n个数相加,而FA只有两个输入端,机器一次只能进行两个数的相加,不能进行多个数据的加法。
    手工计算中,乘数的每一位是0还是1都可直接看见,而在计算机中,采用放乘数的寄存器的每一位直接决定本次相加数是被乘数还是0是很不方便的,若采用该寄存器的最低一位来执行这种判断就简便了。

    计算机中执行乘法时,积的符号位由被乘数和乘数的符号位通过一个半加器(即异或门)实现。
    数值部分的运算规则是:从最低位Y0开始,当乘数Yi为1时,将上次部分积加上被乘数的绝对值,然后右移一位,得到新的部分积;当Yi为0时,则写下全0。然后再对乘数Y的高一位进行类似乘法运算。重复“加—右移”操作N次,可得到最后的乘积。

    R0存放部分积,R2存放被乘数,R1存放乘数
    R0清零,R2存放被乘数,R1存放乘数。乘法开始时,“启动”信号时控制CX置1,于是开启时序脉冲T,当乘数寄存器R1最末位为“1“时,部分积Z和被乘数X在加法器中相加,其结果输出至R0的输入端。一旦控制脉冲T到来,控制信号LDR0使部分积右移1位,与此同时,乘数寄存其R1也在控制信号LDR1作用下右移一位,且计数器I记数一次;
    将步骤三重复执行N次
    当计数器I=n时,计数器I的溢出信号使控制触法器CX置0,关闭时序脉冲T,乘法宣告结束

    原码算法存在的缺点:
    一是符号位需要单独运算,最后给运算结构以正确的符号;
    二是对于采用补码存储的机器,从存储器中取出的是操作数的补码,需先将其转换成原码,这样很不方便,而且影响速度。

    定点补码乘法

    补码乘法的特点是乘数、被乘数用补码表示,符号位参加运算,希望得到的结果就是乘积的补码,符号位在运算中形成

    定点补码乘法原理


    定点除法

    在定点计算机中,完成两个原码表示的数相除时,商的符号由两数的符号位和原码乘法运算方法一样,用模2求和得到,而商的数值部分则是两个正数相除得到

    计算机中执行除法时,商的符号位由被除数和除数的符号位通过一个半加器实现;
    对于数值部分,由于定点小数的绝对值小于1,如果被除数大于或等于除数,则商就大于或等于1,因而会产生溢出,这是不允许的。
    因此在执行除法以前,先要判别是否溢出,不溢出时才执行除法运算。判别溢出的方法是被除数减去除数,若差为正,就表示溢出,即要求被除数<除数。

    恢复余数法

    恢复余数法的运算规则:
    计算机中进行除法时,是模仿十进制除法笔算的过程,但又不能完全照搬。
    在机器中判断是否够减,必须先做减法,若余数为正,表示够减;若余数为负,表示不够减 ,不够减时,必须恢复原来的余数,以便再继续往下运算,这种方法称为恢复余数法。
    要恢复原来的余数,只要当前的余数加上除数即可。

    恢复余数法的缺点:
    当某一次-Y的差值为负时,要多一次+Y恢复余数的操作,降低了执行速度,又使控制线路变得复杂,因此在计算机中很少采用

    加减交替法

    加减交替法的规则:

    首先作X-Y,余数为正,表明产生溢出,应终止除法运算;余数为负,上商为0(作为商的符号位),然后重复下述操作n次,可得商的n位数值
    a. 余数左移一位。
    b. 余数为正时,减除数;余数为负时,加除数。
    c. 所得的新余数为正时,上商为1;为负时,上商为0。
    由于运算中余数共左移了n次,相当于乘2n,故最后得余数应乘上2-n才是真正的正确余数。

    • 判断溢出/”0”
    • 商的符号由被除数的符号和除数的符号共同决定
    • 被除数的位数可以是除数位数的两倍,低位开始放于商的寄存器中.
    • 最后一步余数是负数,需要修正再加上除数,移位.直到为正

    浮点加法、减法运算

    计算步骤

    ⑴ 0操作数检查:用来判断两个操作数中是否有一个为0.看有无简化操作的可能
    ⑵ 对阶操作:即比较两个浮点数的阶码值的大小,求E=Ex-Ey,然后将小阶对大阶。
    ⑶ 尾数进行加或减运算:实现尾数的加减运算,执行两个完成对阶后的浮点数的求和(差)的过程
    ⑷ 规格化并进行舍入处理:若得到的结果不满足规格化规则,就必须把它变成规格化的数。舍入操作,在执行对阶或右规操作时,会使位数低位上的一位或若干位的数值被移掉,使数值精度受到影响,可以把移掉的几个高位的值保存起来供舍入使用

    4.规格化和舍入处理

    结果的符号位与最高符号数值位相同,应执行左规处理,所谓左规格化的规则,就是尾数左移1位,阶码减1,所以结果为:11.00010101(10) ,阶码为00 011,这里采用舍入处理,采用0舍1入法处理,则有

    本题不采用IEEE754标准,其规格化的目标是:尾数的绝对值应大于等于1/2且小于1。即正数应为0.1……,负数应为1.0……。可见,当尾数的最高数值位与符号位不同时,即为规格化数

    浮点乘法和除法运算

    浮点数的阶码运算(移码的运算规则)
    [X]移+[Y]移=2n+[X+Y]移

    设有浮点数x=2-5×0.0110011,y=23×(-0.1110010),阶码用4位移码表示,尾数(含符号位)用8位补码表示。求[x×y]浮。要求用补码完成尾数乘法运算,运算结果尾数保留高8位(含符号位),并用尾数低位字长值处理舍入操作。

    一个小结()

    • 一个定点数由符号位和数值域两部分组成。按小数点位置不同,定点数有纯小数和纯整数两种表示方法。�
    • 按IEEE754标准,一个浮点数由符号位S、阶码E、尾数M三个域组成。其中阶码E的值等于指数的真值e加上一个固定偏移值。�
    • 为了使计算机能直接处理十进制形式的数据,采用两种表示形式:(1)字符串形式,主要用在非数值计算的应用领域;(2)压缩的十进制数串形式,用于直接完成十进制数的算术运算。
    • 数的真值变成机器码时有四种表示方法:原码表示法,反码表示法,补码表示法,移码表示法。其中移码主要用于表示浮点数的阶码E,以利于比较两个指数的大小和对阶操作。�
    • 字符信息属于符号数据,是处理非数值领域的问题。国际上采用的字符系统是七单位的ASCII码。直接使用西文标准键盘输入汉字,进行处理,并显示打印汉字,是一项重大成就。为此要解决汉字的输入编码、汉字内码、字模码等三种不同用途的编码�
    • 为运算器构造的简单性,运算方法中算术运算通常采用补码加、减法,原码乘除法或补码乘除法。为了运算器的高速性和控制的简单性,采用了先行进位、阵列乘除法、流水线等并行技术措施。运算方法和运算器是本章的重点。
    • 定点运算器和浮点运算器的结构复杂程度有所不同。早期微型机中浮点运算器放在CPU芯片外,随着高密度集成电路技术的发展,现已移至CPU内部。
  • 相关阅读:
    Django Web开发学习笔记(1)
    SessionFactory 执行原生态的SQL语句
    Java中使用FileputStream导致中文乱码问题的修改方案
    JavaScript中的namespace
    SpringMVC配置文件
    Python 贝叶斯分类
    Struct(二)
    Struct2 (一)
    SpingMVC ModelAndView, Model,Control以及参数传递
    window.onload
  • 原文地址:https://www.cnblogs.com/ygjzs/p/12466080.html
Copyright © 2011-2022 走看看