第三章预习
高级语言和机器指令中的运算
1.按位运算:符号|按位OR运算;符号&按位AND运算;符号~表示按位NOT运算;符号^按位XOR运算。
2.逻辑运算:符号||按位OR运算;符号&&表示AND运算;符号!表示NOT运算。
···逻辑运算是非数值计算,其操作数只有两个逻辑值:True和False,通常用非0数表示逻辑值True,用全0数表示逻辑值False。
3.移位运算:有逻辑移位和算术移位两种。逻辑移位不考虑符号位,总是把高(低)移出,低(高)位补0。
4.位扩展和位截断运算:进行数据类型转换时,如果遇到一个短数向长数转换,就要进行位扩展运算。进行位扩展运算时,扩展后的数值应保持不变。有两种位扩展方式:0扩展和符号扩展。
- 基本运算部件
基本的运算部件是加速器、ALU和位移器,ALU的核心部件是加法器
串行进位加法器
全加器:用来实现两个本位数加上低位生成一位本位以及一位向高位的进位
-
补码加减法
无符号数可以按位逻辑运算可以用逻辑门电路实现,带符号整数基本都用补码表示。
补码加法公式:[x+y]补=[x]补+[y]补(mod 2^n)
补码减法公式:[x-y]补=[x]补+[-y]补(mod 2^n) -
原码的加减法运算
加法实行“同号求和,异号求差”,对减法实行“异号求和,同号求差”。
求和时,数值位相加,若最高位进位则结果溢出。和的符号取被加数(被减数)的符号。
求差时,被加数(被减数)数值位加上加数(减数)数值位的补码,并且按照以下规则产生结果。1、最高数值位产生进位,表示加法结果为正,所得数值位正确。差的符号位取被被加数(被减数)的符号。2、最高数值位没有进位,表示加法结果为负,得到的数值位是补码形式,需要对结果求补,还原为绝对值的形式的数值位。符号位为被加数(被减数)的符号取反 -
原码的一位乘法
原则:如果当乘数的某位上为1,则被乘数就加上本身,否则加上0。 -
补码的一位乘法
符号位参与运算,运算的数均以补码表示,被乘数 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 -
浮点数运算
(1)浮点数加减运算
1.对阶:使两数的小数点位置对齐。
2.尾数加减:将对阶后的两尾数按定点加减运算规则求和(差)。
3.规格化,为增加有效数字的位数,提高运算精度,必须将求和或差后的尾数规格化。
4.舍入,为提高精度,要考虑尾数有意时丢失的数值位。
5.判断结果是否溢出。
(2)浮点数乘除运算
两浮点数相乘其乘积的阶码为相乘两数阶码之和,其尾数应为相乘两数的尾数之积。
两个浮点数相除,商的阶码为被除数的阶码减去除数的阶码得到的差,尾数为被除数的尾数除以除数的尾数所得的商。
参加运算的两个数都为规格化浮点数,乘除运算都可能出现结果不满足规格化要求的问题,因此也必须进行规格化,舍入和溢出判断等操作。规格化时要修改阶码。