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

原文地址:https://www.cnblogs.com/dynmi/p/11758040.html