<科普>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,则商为负。