zoukankan      html  css  js  c++  java
  • <科普>CPU进行四则运算(加减乘除)的主流方法

    以下除特殊说明外均为32位数的运算

    1.加法运算

      A   +   B    =   C

    无符号整数加法和有符号整数加法均采用以下方案进行操作

    用到的寄存器与初始化内容:

                    32位加数寄存器--------初始化为加数

                    32位被加数寄存器 ----初始化为被加数

                    32位和寄存器 ----------全部置零

    操作方案如下:

      将加数寄存器被加数寄存器按位对齐,每组对应位分别进行以下操作:

    放在一起就是:(因32位画出来过于繁杂,这里的图示采用了8位)

    在此基础上还要设置溢出判断,来表示这次运算是否发生溢出。

    2.减法运算

      被减数   -   减数  =  差

      这里承用上面的加法运算单元。

      用A表示被减数,B表示减数。首先将B转换为其相反数即(-B)。然后进行A+(-B)的加法运算。同时也要设置一段逻辑电路判断减法运算是否发生溢出。

    3.乘法运算

      被乘数  X  乘数   =   积

    1>无符号整数乘法

       最早的解决方案:

    所用到的存储器与初始化存储内容:

                    32位乘数寄存器--------初始化为乘法运算的乘数

                    64位被乘数寄存器 ----低32位填充为乘法运算的被乘数,高32位置零

                    64位积寄存器 -----------全部置零

    用到的功能分别为:循环,无符号加法,移位。

    执行结构图如下:

        改进后的解决方案:

    所用到的存储器与初始化存储内容:

                    32位被乘数寄存器(简称A)------初始化为乘法运算的被乘数

                    64位积寄存器 (简称B)-----------高32位置零,用来存放乘积,低32位初始化为乘数

    对于每次迭代:

      

    2>有符号整数乘法

    先把乘数和被乘数的符号位记下来,然后把乘数和被乘数转换成正数进行无符号乘法运算,运算结果再加上符号。

    3>浮点数乘法

    4.除法运算

      被除数   ÷   除数  =  商 ••••••余数

    1>无符号整数除法

    所用到的存储器与初始化存储内容:

                    32位商寄存器-----------全部置零

                    32位除数寄存器 -------填充32位除数

                    65位余数寄存器 -------左半部分置零,右半部分填充32位被除数

    处理结构图:

     

    2>有符号整数除法

     跟上文有符号整数乘法一样,先保存除数、被除数符号,若两者符号异或为1,则商为负。

    3>浮点数除法

  • 相关阅读:
    垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想
    自考感悟,话谈备忘录模式
    [每日一题] OCP1z0-047 :2013-07-26 alter table set unused之后各种情况处理
    Java实现 蓝桥杯 算法提高 p1001
    Java实现 蓝桥杯 算法提高 拿糖果
    Java实现 蓝桥杯 算法提高 拿糖果
    Java实现 蓝桥杯 算法提高 求arccos值
    Java实现 蓝桥杯 算法提高 求arccos值
    Java实现 蓝桥杯 算法提高 因式分解
    Java实现 蓝桥杯 算法提高 因式分解
  • 原文地址:https://www.cnblogs.com/dynmi/p/11758040.html
Copyright © 2011-2022 走看看