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>浮点数除法

  • 相关阅读:
    Veritca 简单安装配置过程
    本地环回,引发的血案
    Centos8的网络管理
    在做自动化测试之前你需要知道的什么是自动化测?
    APP移动测试用例总结
    Appium做Android功能自动化测试
    Selenium Webdriver模拟鼠标键盘操作
    线程锁 创建两个线程,其中一个输出152,另外一个输出AZ。要求使用线程锁,使输出为: 12A 34B 56C 78D Y
    Win10安装MongoDb Y
    linux下Docker安装 Y
  • 原文地址:https://www.cnblogs.com/dynmi/p/11758040.html
Copyright © 2011-2022 走看看