一,高级语言和机器指令中的运算
1.C程序中涉及的运算
按位运算
符号:|,&,~, ^
实现掩码操作,通过与给定的一个位模式进行按位与,可以提取所需要的位,然后进行操作。
逻辑运算
符号:||, &&, !
此运算为非数值计算,只有true和false两个逻辑值。非0数表示true。全0表示false。
移位运算
移位操作有逻辑移位和算术移位两种。逻辑移位不考虑符号位,总是把高(低)位移出,低(高)位补0。无符号整数的逻辑左移,如果最高位移出的是1,则发生溢出。
负数反码,移位后符号位不变,左移时,最高位丢失0,则结果出错;右移是最低位丢失0,影响精度
位扩展和位截断运算
在数据类型转换时,遇到一个短数向长数转换,就需要进行位扩展运算。位扩展时,扩展后的数值保持不变。位扩展分为0扩展和符号扩展。0扩展用于无符号数,只要在短的无符号数前添加足够的0即可。符号扩展用于补码表示的带符号整数。
一个规律, 2^n-2^(n-1) = 2^(n-1) 3^n-3^(n-1)=2*3^(n-1) 。
位扩展其实很好理解,正数和0往前加零就够了,负数则是往前加一,不过注意位扩展往往都是隐形的,不知不觉就扩展了,比如 short i = 6; int j = i; 注意 位扩展 数值是不变的
位截断,就是保留低k位二进制码, 比如把一个四位二进制码截断成三位,这不可避免的改变了原来的值,
对于无符号数,B2U([X',X'',X''',X''''......]) MOD 2^k 就可以了。
对于有符号数,U2T(B2U([x',x'',x''',x''''.....])mod 2^k)
注: B2U 二进制码解释为无符号数 U2T 无符号数编码解释为补码
2.MIPS指令中涉及的运算
高级语言中的所有运算都是通过指令系统中的运算指令实现的。利用MIPS提供的运算指令完全能够实现C语言所需求的各种运算要求。
二,基本运算部件
用一个专门的算术逻辑部件(ALU)来完成基本逻辑运算和定点数加减运算,各类定点乘除运算和浮点数运算则可利用加法器或ALU和移位器来实现,因此基本的运算部件是加法器,ALU和移位器,ALU的核心部件是加法器。
1.串行进位加法器
2.并行进位加法器
并行加法器由多个全加器组成,其位数与机器的字长相同,各位数据同时运算。
最长运算时间主要是由进位信号的传递时间决定的
每个全加器都有一个从低位送来的进位输入和一个传送给高位的进位输出
进位通常分为串行进位与并行进位
3.带标志加法器
4.算术逻辑部件
三,定点数运算
1.补码加减运算
零标志ZF=1表示结果F为0
符号标志SF表示结果的符号,即F的最高位
进/借位标志CF表示无符号数加/减运算是的进位/错位
溢出标志OF=1表示带符号整数运算时结果发生了溢出
2.原码加减运算
运算规则:
比较两个操作数的符号,对加法实行“同号求和,异号求差”,对减法实行“异号求和,同号求差”。
求和时,数值位相加,若最高位产生进位则结果溢出。和的符号位取被加数(或被减数)的符号。
求差时,被加数(或被减数)数值位加上加数(或减数)数值位的补码,并按以下规则产生结果
(1)最高数值位产生进位,表明加法结果为正,所得数值位正确
(2)最高数值位没有产生进位,表明加法结果为负,得到的是数值位的补码形式,因此需要对结果求补,还原为绝对值形式的数值位
(3)在上述(1)的情况下,差的符号位取被加数(被减数)的符号;在上述(2)d的情况下,符号位为被加数(被减数)的符号取反
3.移码加减运算
4.原码乘法运算
原码一位乘法
(1)确定乘积的符号位。由两个乘数的符号异或得到
(2)计算乘积数值位。乘积数值部分为两个乘数的数值部分之积
原码二位乘法
5.补码乘法运算
补码一位乘法
将符号与数值位合在一起参与运算,直接得出用补码表示的乘积,且正数和负数同等对待。
补码二位乘法
两位一乘,,把乘数分为两位一组,根据两位代码的组合决定加或减被乘数的倍数,形成的部分积每次右移两位。
6.快速乘法器
列阵乘法器
7.原码除法运算
(1)恢复余数法:当余数为负时,需加上除数,将其恢复成原来的余数。
a.符号位单独按两数符号异或求得;
参与运算的是绝对值的补码
b.判溢出, 要求|被除数| < |除数| (对小数而言)
(如果是整数,则要求|被除数| > |除数| );
c.被除数减去除数;
d.若所得.余数为正,相应位上商为1,余数左移一位,减去[y]补;
若余数为负,相应位上商为0,余数加上除数(恢复余数),再左移一位,加上[-y]补;
e.重复第4步,直到求得所要求的商为止(移n次)
f.若最后一步余数为负,则需要恢复余数。
(2)补码不恢复余数法(加减交替法)
对于小数补码运算,商等于"-1"是被允许的。
算法规则:
符号位参加运算,除数与被除数均用双符号补码表示、
被除数与除数同号,被除数减去除数,被除数与除数异号,被除数加上除数。
余数与除数同号,商上1,余数左移一位减去除数; 余数与除数异号,商上0,余数左移一位加上除数。(注意:余数左移加上或减去除数后就得到了新余数。)
采用校正法包括符号在内,重复n+1次3.
8.补码除法运算
(1)补码恢复余数除法
(2)补码不恢复余数除法
四,浮点数运算
1.浮点数加减运算
对阶:使x,y的阶码相等,以使尾数可以相加减。
原则:小阶向大阶看齐,阶小的那个数的尾数右移,右移的位数等于两个阶(指数)的差的绝对值。
尾数加减:对阶后两个浮点数的指数相等,此时,可以进行对阶后的尾数相加减
尾数规格化
位数的舍入处理
溢出判断
2.浮点数的乘除运算
浮点数乘法运算
(1)尾数相乘,指数相加
指数的相加运算采用移码相加运算算法
(2)尾数规格化
(3)尾数的舍入处理
(4)溢出判断
浮点数除法运算
五,运算部件的组成
1.定点运算部件
2.浮点运算部件