运算方法和运算部件
1 高级语言和机器指令中的运算
-
1.1 按位运算
-
符号|按位OR运算;符号&按位AND运算;符号~表示按位NOT运算;符号^按位XOR运算。
-
1.2 逻辑运算
-
符号||按位OR运算;符号&&表示AND运算;符号!表示NOT运算。
-
1.3 移位运算
-
原码的移位:原码算术移位:左移丢1,运算会出错,右移丢1,会影响精度
-
补码和反码的移位
-
对于正数来说原码,补码,反码都补0。对于负数来说原码和补码的最后一位相等,所以如果是在地位的话,和原码相同,如果是在高位的话,补码和反码相同补1。所以有上图中的右移的话和反码相同补1,左移的话和原码相同补0.
2 基本运算部件
-
2.1串行进位加法器
-
只有一个全加器,数据逐位串行送入加法器中进行运算。进位触发器用来寄存进位信号,以便参与下一次运算。
-
如果操作数长n位,加法就要分n次进行,每次产生一位和,并且串行逐位地送回寄存器。
-
串行进位
-
把n个全加器串接起来,就可以进行两个n位数的相加。
-
串行进位又称为行波进位,每一级进位直接依赖于前一级的进位,即进位信号是逐级形成的。
-
最长运算时间主要是由进位信号的传递时间决定的,位数越多延迟时间就越长
-
2.2并行进位加法器
-
并行加法器由多个全加器组成,其位数与机器的字长相同,各位数据同时运算。
-
并行加法器的最长运算时间主要是由进位信号的传递时间决定的
-
并行加法器的每个全加器都有一个从低位送来的进位输入和一个传送给高位的进位输出
-
并行加法器的进位通常分为串行进位与并行进位。
-
并行进位
-
各级进位信号同时形成,又称为先行进位、同时进位。
-
加快进位产生和提高传递的速度,即将各级低位产生的本级G和P信号依次同时送到高位各全加器的输入,以使它们同时形成进位信号
-
2.3算术逻辑部件
-
3 定点数的运算
- 3.1补码加减法
- 无符号数可以按位逻辑运算可以用逻辑门电路实现,带符号整数基本都用补码表示。
- 补码加法公式:[x+y]补=[x]补+[y]补(mod 2^n)
- 补码减法公式:[x-y]补=[x]补+[-y]补(mod 2^n)
- 定点小数的加减法
- 3.2原码的加减法运算
- 加法实行“同号求和,异号求差”,对减法实行“异号求和,同号求差”。
- 求和时,数值位相加,若最高位进位则结果溢出。和的符号取被加数(被减数)的符号。
- 求差时,被加数(被减数)数值位加上加数(减数)数值位的补码,并且按照以下规则产生结果。1、最高数值位产生进位,表示加法结果为正,所得数值位正确。差的符号位取被被加数(被减数)的符号。2、最高数值位没有进位,表示加法结果为负,得到的数值位是补码形式,需要对结果求补,还原为绝对值的形式的数值位。符号位为被加数(被减数)的符号取反
- 3.3原码的一位乘法
原则:如果当乘数的某位上为1,则被乘数就加上本身,否则加上0。 - 3.4原码的两位乘法
- 3.5补码的一位乘法
- 符号位参与运算,运算的数均以补码表示,被乘数 x 取双符号位,乘数 y 取单符号位
- 计算被乘数 x 的负数的补码
- 累加寄存器(ACC)取 n+2 位(取双符号位,以便进行溢出检查,故最终结果中ACC的前两位是符号位),对应 [x]补 和 [-x]补 ,初始化为0
- 乘商寄存器(MQ)初始化为 [y]补(取单符号位),末尾增设附加位(数值为0),共n+2位
- 根据y的次低位和最低位的取值确定操作(如下表),由于是有符号数,故移位采用补码的算术右移
- 重复上述步骤,判断N+1次,但第N+1次不再移位(共进行N+1次累加和N次右移)
- ACC和MQ的前10位为乘积(前2位为符号),故|XY|补=11.01110001,XY=-0.10001111
- 3.6原码的除法运算
- 手工算法
- 原码的恢复余数法
- 符号位与数值位分开求,商符由两个数的符号位“异或”形成
- 原码的不恢复余数除法
两者区别:
恢复余数 不用移动 即余数为负的时候
而不恢复余数 负正都要移动- 补码的恢复余数除法
- 因为除数和被除数异号,因此商取补为1110,余数1111,即,-7/3=-2,余数为-1
4 浮点数运算
- 浮点数的加减运算
- 对阶,使得两数的小数点位置对齐。
- 尾数求和,将对阶后的两个尾数按照定点的加减法运算规则计算。
- 规格化,为增加有效数字的位数,提高运算精度,必须将求和(差)后的尾数规格化
- 舍入,为提高精度,要考虑尾数右移时候丢失的数值位
- 溢出判断,判断计算结果是否存在溢出
- 浮点数的乘除法
- 阶码相加减:按照定点整数的加减法运算方法对两个浮点数的阶码进行加减运算。
- 尾数相乘或相除:按照定点小数的阵列乘除法运算方法对两个浮点数的尾数进行乘除运算。为了保证尾数相除时商的正确性,必须保证被除数尾数的绝对值一定小于除数尾数的绝对值。若被除数尾数的绝对值大于除数尾数的绝对值,需对被除数进行调整,即被除数的尾数每右移1位,阶码加1,直到被除数尾数的绝对值小于除数尾数的绝对值。
- 结果规格化并进行舍入处理:浮点数乘除运算结果的规格化和舍入处理与浮点数加减运算结果的规格化和舍入处理方法相同。并且在浮点数乘除运算的结果中,由于乘积和商的绝对值一定小于1,因此在浮点乘除运算结果进行规格化处理时只存在向左规格化,不可能出现向右规格化。
- 判断溢出:浮点数乘除运算结果的尾数不可能发生溢出,而浮点数运算结果的溢出则根据运算结果中浮点数的阶码来确定,溢出的判定和处理方法与浮点加减运算完全相同。