1.高级语言和机器指令中的运算
1.1C程序中涉及的运算
1.按位运算:是一种数值运算,运算时将两个操作数中对应各二进位按照指定的逻辑运算规则逐位进行计算。
2.逻辑运算:是非数值运算,其操作数只有两个逻辑值:True和False.
3.移位运算:
分为
逻辑移位:不考虑符号位,总是把高(低)位移出,低(高)位补0。对于无符号整数的逻辑左移,如果最高位移出的是1,则发生溢出。
算术移位:
许多机器和编译器都对无符号整数采用逻辑移位方式,而对带符号整数采用算术移位方式。
表达式x<<k表示x左移k位,表达式x>>k表示x右移k位。
4.位扩展和位截断运算
2.基本运算部件
2.1串行进位加法器
也被称为行波进位加法器。
2.2并行进位加法器
2.3带标志加法器
为了加快加法运算的速度,真正的电路一点使用多级先行进位方式。
2.4算术逻辑部件
AUL是一种能进行多种算术运算与逻辑运算的组合逻辑电路,其核心部件是带标志加法器,多采用先行进位方式。
3.定点数运算
3.1.补码加减运算
3.2.原码加减运算
规则如下:
1.比较两个操作数的符号,对加法实行“同号求和,异号求差”,对减法实行“异号求和,同号求差”。
2.求和时,数值位相加,若最高位产生进位则结果溢出。和的符号位取被加数(或被减数)的符号。
3.求差时,被加数(或被减数)数值位加上加数(或减数)数值位的补码,并按以下规则产生结果:
①最高数值位产生进位,表明加法结果为正,所得数值位正确。
②最高数值位没有产生进位,表明加法结果为负,得到的是数值位的补码形式,因此,需要对结果求补,还原为绝对值形式的数值位。
③在上述①的情况下,差的符号位取被加数(被减数)的符号;在上述②的情况下,符号位为被加数(被减数)的符号取反。
3.3.移码加减运算
移码的和、差等于和、差的补码。
3.4.原码乘法运算
1.一位乘法
1)确定乘积的符号位:由两个乘数的符号异或得到。
2)计算乘积的数值位:乘积的数值部分为两个乘数的数值部分之和。
2.二位乘法
3.5.补码乘法运算
1.一位乘法
布斯乘法(Booth):可以将符号位与数值位合在一起参加运算,直接得出用补码表示的乘积,且正数和负数同等对待。
补码乘法运算规则如下:
①乘数最低位增加一位辅助位Y-1=0;
②根据YiYi-1的值,决定是“+[x]补”、“-[x]补”还是“+0”。
③每次加减后,算术右移一位,得到部分积。
④重复第②和第③步n次,结果得[x*y]补。
3.6.快速乘法器
3.7.原码除法运算
4.浮点数运算
4.1.浮点数加减运算
1.对阶
2.尾数加减
3.尾数规格化
4.尾数的舍入处理
5.溢出判断
4.2浮点数乘除运算
5.运算部件的组成
5.1定点运算部件
核心部件:ALU 以及通用寄存器组、多路选择器、状态寄存器、移位器、用来传送数据的数据总线等
5.2浮点运算部件