3.1高级语言和机器指令中的运算
3.1.1 C程序中涉及的运算
1.按位运算:符号|表示按位OR运算;符号&表示按位AND运算;符号~表示按位NOT运算;符号^表示按位XOR运算。
2.逻辑运算:符号||表示按位OR运算;符号&&按位AND运算;符号!表示按位NOT运算。
3.移位运算:有逻辑移位和算术移位两种。逻辑移位不考虑符号位,总是把高(低)移出,低(高)位补0。
4.位扩展和位截断运算:进行数据类型转换时,如果遇到一个短数向长数转换,就要进行位扩展运算。进行位扩展运算时,扩展后的数值应保持不变。有两种位扩展方式:0扩展和符号扩展。
3.1.2 MIPS指令中涉及的运算
MIPS指令系统涉及的运算有按位逻辑运算、逻辑移位、算数移位、带符号整数的加减乘除、无符号整数的加减乘除、带符号整数的符号扩展、无符号数的0扩展、单精度浮点数加减乘除、双精度浮点数加减乘除。
3.2基本运算部件
基本的运算部件是加法器、ALU和移位器、ALU的核心部件是加法器。
(1)串行进位加法器
①只有一个全加器,数据逐位串行送入加法器中进行运算,进位触发器用来寄存进位信号,便于下次运算。
②操作数长n位,加法就要分n次进行,每次产生一位和,并且串行逐位地送回寄存器。
③把n个全加器串接起来,可以进行两个n位数的相加。
④串行进位(行波进位),每一级进位直接依赖于前一级的进位,所以进位信号是逐级形成。
⑤最长运算时间主要是由进位信号的传递时间决定的,位数越多延迟时间就越长。
(2)并行进位加法器
先行进位(同时进位):各级进位信号同时形成。
加快进位产生和提高传递的速度,即将各级低位产生的本级G和P信号依次同时送到高位各全加器的输入,以使它们同时形成进位信号。
(3)带标志加法器
n位无符号加法器只能用于两个n位二进制数相加,不能进行减运算,也不能进行带带符号整数的加减运算。
3.2.1算数逻辑部件
定点数的运算
3.3补码加减法
无符号数可以按位逻辑运算可以用逻辑门电路实现,带符号整数基本都用补码表示。
补码加法公式:[x+y]补=[x]补+[y]补(mod 2^n)
补码减法公式:[x-y]补=[x]补+[-y]补(mod 2^n)
3.4原码的加减法运算
加法实行“同号求和,异号求差”,对减法实行“异号求和,同号求差”。
求和时,数值位相加,若最高位进位则结果溢出。和的符号取被加数(被减数)的符号。
求差时,被加数(被减数)数值位加上加数(减数)数值位的补码,并且按照以下规则产生结果。1、最高数值位产生进位,表示加法结果为正,所得数值位正确。差的符号位取被被加数(被减数)的符号。2、最高数值位没有进位,表示加法结果为负,得到的数值位是补码形式,需要对结果求补,还原为绝对值的形式的数值位。符号位为被加数(被减数)的符号取反
3.3原码的一位乘法
原则:如果当乘数的某位上为1,则被乘数就加上本身,否则加上0。
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浮点数运算
浮点数加减运算
1.对阶:使两数的小数点位置对齐。
2.尾数加减:将对阶后的两尾数按定点加减运算规则求和(差)。
3.规格化,为增加有效数字的位数,提高运算精度,必须将求和或差后的尾数规格化。
4.舍入,为提高精度,要考虑尾数有意时丢失的数值位。
5.判断结果是否溢出。
浮点数乘除运算
两浮点数相乘其乘积的阶码为相乘两数阶码之和,其尾数应为相乘两数的尾数之积。
两个浮点数相除,商的阶码为被除数的阶码减去除数的阶码得到的差,尾数为被除数的尾数除以除数的尾数所得的商。
参加运算的两个数都为规格化浮点数,乘除运算都可能出现结果不满足规格化要求的问题,因此也必须进行规格化,舍入和溢出判断等操作。规格化时要修改阶码。