第三章预习
一、高级语言和机器指令中的运算
基本运算
- 按位运算
- 逻辑运算
- 移位运算
移位操作有逻辑移位和算术移位两种。逻辑移位不考虑符号位,总是把高(低)位移出,低(高)位补0。无符号整数的逻辑左移,如果最高位移出的是1,则发生溢出。
每左移一位,相当于数值扩大一倍,所以左移可能会发生溢出,左移k位,相当于数值乘以2的k次方;每右移一位,相当于数值缩小一半,右移k位,相当于数值除以2的k次方。
- 位扩展和位截断运算
在数据类型转换时,遇到一个短数向长数转换,就需要进行位扩展运算。位扩展时,扩展后的数值保持不变。位扩展分为0扩展和符号扩展。0扩展用于无符号数,只要在短的无符号数前添加足够的0即可。符号扩展用于补码表示的带符号整数。
MIPS指令中涉及的运算
高级语言中的所有运算都是通过指令系统中的运算指令实现的。利用MIPS提供的运算指令完全能够实现C语言所需求的各种运算要求。
二、基本运算部件
用一个专门的算术逻辑部件(ALU)来完成基本逻辑运算和定点数加减运算,各类定点乘除运算和浮点数运算则可利用加法器或ALU和移位器来实现,因此基本的运算部件是加法器,ALU和移位器,ALU的核心部件是加法器。
串行进位加法器
全加器用来实现两个本位数加上低位进位生成一位本位和以及一位向高位的进位。
并行进位加法器
先行进位(超前进位)部件,简称CLA部件
带标志加法器
要能够进行无符号整数的加/减运算和带符号整数的加/减运算,还需要在无符号数加法器的基础上增加相应的逻辑门电路,使得加法器不仅能计算和/差,还要能够生成相应的标志信息
算术逻辑部件
ALU是一种能进行多种算术运算与逻辑运算的组合逻辑电路,其核心部件是带标志加法器,多采用先行进位方式
三、定点数运算
补码加减运算
零标志ZF=1表示结果F为0
符号标志SF表示结果的符号,即F的最高位
进/借位标志CF表示无符号数加/减运算是的进位/错位
溢出标志OF=1表示带符号整数运算时结果发生了溢出
原码加减运算
运算规则:
- 比较两个操作数的符号,对加法实行“同号求和,异号求差”,对减法实行“异号求和,同号求差”。
- 求和时,数值位相加,若最高位产生进位则结果溢出。和的符号位取被加数(或被减数)的符号。
- 求差时,被加数(或被减数)数值位加上加数(或减数)数值位的补码,并按以下规则产生结果
- 最高数值位产生进位,表明加法结果为正,所得数值位正确
- 最高数值位没有产生进位,表明加法结果为负,得到的是数值位的补码形式,因此需要对结果求补,还原为绝对值形式的数值位
- 在上述(1)的情况下,差的符号位取被加数(被减数)的符号;在上述(2)d的情况下,符号位为被加数(被减数)的符号取反
移码加减运算
原码乘法运算
- 原码一位乘法
- 原码二位乘法
补码乘法运算
- 补码一位乘法
将符号与数值位合在一起参与运算,直接得出用补码表示的乘积,且正数和负数同等对待。
- 补码二位乘法
两位一乘,,把乘数分为两位一组,根据两位代码的组合决定加或减被乘数的倍数,形成的部分积每次右移两位。
快速乘法器
- 列阵乘法器
原码除法运算
- 恢复余数除法
- 不恢复余数除法
补码除法运算
- 补码恢复余数除法
- 补码不恢复余数除法
四、浮点数运算
浮点数加减运算
- 对阶:使x,y的阶码相等,以使尾数可以相加减。
原则:小阶向大阶看齐,阶小的那个数的尾数右移,右移的位数等于两个阶(指数)的差的绝对值。
- 尾数加减:对阶后两个浮点数的指数相等,此时,可以进行对阶后的尾数相加减
- 尾数规格化
- 位数的舍入处理
- 溢出判断
浮点数的乘除运算
- 浮点数乘法运算
- 浮点数除法运算
五、运算部件的组成
- 定点运算部件
- 浮点运算部件