二进制加法和减法
运算规则略
判断是否溢出
操作 | 操作数A | 操作数B | 结果溢出的条件 |
---|---|---|---|
A+B | >=0 | >=0 | <0 |
A+B | <0 | <0 | >=0 |
A-B | >=0 | <0 | <0 |
A-B | <0 | <0 | >=0 |
在MIPS中采用两种方法监测是否溢出
- 加法、立即数加法和减法,在溢出时产生异常
- 无符号加法、立即数无符号加法和无符号减法,溢出时不发生异常。
做加减法运算等的硬件是算术逻辑单元
相关概念: - 算术逻辑单元(ALU):用于执行加法、减法,逻辑运算等操作的硬件。
- 异常:也叫中断,一种打断正常程序执行过程的事件,用于检测溢出。
- 中断:来自处理器外部的异常。
浮点数
浮点数是二进制小数点不固定的表达数的计数法。
- 浮点表示:浮点表示要在尾数和指数位宽之间权衡,保证精度和表示范围。
尾数:位于浮点数的尾数字段,其值在0和1之间。
指数:位于浮点数的指数字段,表示小数点的位置。
浮点数溢出:是上溢,正的指数太大而导致指数域放不下的情况。
下溢:负的指数太大而不能在质数域中表示出来。 - 双精度
除了上述表示,还有双精度表示,提高到64位,指数有11位,尾数有52位。
浮点数实际是在IEEE 754中规定的,隐藏了规格化二进制数的前导位1。所以在单精度下,数有24位宽,双精度有53位宽。但是0除外。
数的标识为: ( − 1 ) s × ( 1 + F ) × 2 E (-1)^s×(1+F)×2^E (−1)s×(1+F)×2E,F是0-1之间的数,E是指数域中的值。
在指数表示时,用了带偏阶的计数法,将最小的负数计为 0000..0 0 2 0000..00_2 0000..002,最大的正指数表示为 11111..1 1 2 11111..11_2 11111..112,规定单精度的偏阶为127,双精度为1023目的是为了将指数表示去掉符号位。
浮点数加法
浮点数乘法
- 计算新的指数,两个指数相加,减去一个偏阶
- 有效数乘法
- 规格化
- 舍入,并检验是否规格化及溢出与否
MIPS中的浮点数指令
- 浮点单精度加:add.s;浮点双精度加:add.d
- 浮点单精度减:sub.s;浮点双精度减:sub.d
- 浮点单精度乘:mul.s;浮点双精度乘:mul.d
- 浮点单精度除:div.s;浮点双精度除:div.d
- eq、neq、lt、le、gt、ge分别为等于、不等于、小于、小于等于、大于、大于等于,用于替换c.x.s和c.x.d中的x,表示比较
- 浮点比较为真跳转bclt,为假跳转bclf
浮点数的精确性
浮点数不能精确的表示实数,因为在0和1之间的实数有无穷个,但浮点数表示的有限。因此规定了舍入模式,在中间计算中,多保留两位,分别为保护位和舍入位。
- 保护位:在浮点数中间计算中,在最右边多保留的两位中的首位,用于提高舍入的精度
- 舍入位:在浮点数中间计算中,在最右边多保留的两位中的第二位,使浮点中间结果满足浮点格式,得到最接近的数。
此外:
- 粘贴位:同保护位和舍入位一样用于舍入的位,当舍入位右边有非零的数据时将其置为1.
- 尾数最低位:在实际数和能表达的数之间的有效数最低位上的误差位数。
- 混合乘加:一条浮点指令,其执行一次乘法和一次加法,但只在执行加法后才进行舍入。