一、加法和减法
加法即数据从右到左逐位相加,同时进位也相应地向左传播
减法可采用加法实现:减数在简单的取反后再加1形成补码再进行加法操作
而当运算结果超过限制时,就会发生溢出。
当相加的两个源操作数符号相异时,不会发生溢出;而当相减的符号相同时,不会发生溢出。(溢出发生时,符号位被数值位占用而产生错误;当两个正数相加但结果为负时,则说明发生溢出;或者做减法时,一个正数减去一个负数得到一个负的结果等1,则也说明发生溢出)
由于无符号数通常用于表示内存地址,这种情况下的溢出可以忽略
- 加法(add)、立即数加法(addi)和减法(sub),这三条指令在溢出时产生异常
- 无符号加法(addu)、立即数无符号加法(addiu)和无符号减法(subu),这三条指令在发生溢出时不会产生异常
二、乘法与除法
这个算法大概需要100个时钟周期来完成两个32位的数相乘(Amdahl定律:如果一个慢速操作在程序中占据一定比重的话,也会限制程序的性能)
可以改进成每一步只需要一个时钟周期,可以并行化来加速执行:当乘数位为1时,将乘数和被乘数进行移位,同