MIPS第三章学习(计算机的算术运算)

加法和减法

减法可以采用的操作:

1.直接减

2.加上被减数的补码

考虑可能发生溢出的几种情况

1.两个符号相同的数相加

2.两个符号相反的数相减

(用正数减负数得到负数的结果   或者     是用负数减正数得到正数的结果)

------>MIPS检测溢出的方法:

采用两种算数指令

加法(add)立即数加法(addi)和减法(sub)在溢出时产生异常

无符号加法(addu)立即数无符号减法(addiu)和无符号减法(subu)在溢出时不会产生异常

 在这里就要想到符号拓展了:

在MIPS语言中,许多指令规定立即数是16位的,例如addi,对于addiu来说,与add,addi和sub指令类似,16位立即数要拓展为32位

乘法

对于正数:通过乘数不断地右移一位,被乘数不断地左移一位,然后将所得乘积全部相加

有符号乘法:将被乘数与乘数化为正数(采用补码的形式)并记住原来的符号位,迭代31次,当符号位相异时,结果为负

MIPS单独提供了一堆32位寄存器来容纳64位的积,称为Hi和Lo

为了产生正确的有符号积和无符号积,MIPS提供了两条指令:

乘法(mult)和无符号乘法(multu)

MIPS乘法指令都忽略溢出------->利用软件来检测是否因积过大而32位不够表示-------->

对于multu,如果Hi为0则无溢出,对于mult,如果Hi为Lo的符号位则也无溢出

除法 

除法比乘法要稍微复杂一点,首先要确定商寄存器的位数,例如是4位的,则需要将除数向左移四位,然后比较移完的除数与被除数的关系,用被除数减去除数,若结果>0,则商低位为一,将商左移一位,除数右移一位,被除数减除数,继续比较,否则为0,商低位为0,将商左移一位,除数右移一位,继续比较。

有符号除法

记住除数和被除数的符号位,相异,则商为负

有符号数(div)无符号数(divu),寄存器与乘法相同

浮点运算

利用32比特的字长表示浮点数

符号位置于最高位,指数位放在有效位前(有着相同符号的情况下,指数大的其数值就越大),尾数宽度影响表示范围(字的大小是固定的,尾数和指数的位宽需要折中掂量

MIPS单精度浮点数:指数域8位,尾数域23位,符号1位

IEEE 754浮点标准-隐藏规格化二进制数的前导位1(去除了1,只保留小数点后的几位)

                             -引入带偏阶的计数法(将最小的负指数表示为00...000,最大的正整数表示为11...111)

可能导致的问题:

上溢:正的指数太大而导致指数域放不下

下溢:付的指数太大而导致指数域放不下

------->双精度浮点数:指数域11位,尾数域52位,符号1位

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值