数据溢出问题
根据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是跳转到寄存器里存