MIPS汇编指令易错点碎碎念

数据溢出问题

根据MIPS指令集,我们知道,指令对于立即数都是有位数限制的。

下面将会给出几条带有立即数的指令,请问哪条指令的立即数存在数据溢出的情况?

PS:不同于机器码,汇编指令的参数需要以负号来区分正负数。


A addi $a0,$0,0x7643
B addi $a0,$0,0x8165 正确
C ori $a0,$0,0x7643
D ori $a0,$0,0x8165

对于addi和ori指令,他们的立即数都是16位的,不同之处在于addi中的立即数是有符号数,而ori中的立即数是无符号数。对于有符号立即数,第一位是符号位,也就是说addi指令的立即数最多只能表示一个15位的数,而0x8165是16位的数,所以数据溢出了。

指令跳转

1、j指令只有26位用于存储跳转到的地址,那么j指令能跳转到的代码范围有多大?
A 64KB
B 64MB
C 256MB 正确
D 4GB

2、jr指令可以跳转到的代码范围有多大?
A 64KB
B 64MB
C 256MB
D 4GB 正确

3、Beq指令可以跳转的代码范围有多大?
A 64KB
B 128KB
C 256KB 正确
D 512KB 

根据指令集对j型指令的定义,其能跳转到的指令范围为226条,即228B。在高级语言转化为汇编语言的过程中,b类跳转指令通常对应于循环,因而一般是小范围的跳转;而j类跳转指令通常用于过程调用,可能会在整个程序的代码段范围内跳转。如果跳转范围超过256MB,则需要多条j指令进行“接力”或使用jr。jr是跳转到寄存器里存

  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值