[英]16 bits hex range for mips assembly instruction beq and bne
我已经为mips汇编语言实现了beq指令。 根据我对beq指令( beq $s, $t, i
)的理解,我可以采用整数值或十六进制值。 我已经为16位整数值建立了界限。 我想知道16位十六进制值的界限是什么,所以当我太大(或太小?)时,它将在执行之前输出错误。 以下是二进制的beq指令。
Branch On Equal
beq $s, $t, i
0001 00ss ssst tttt iiii iiii iiii iiii
我尝试了(i> 0xffff),但似乎无法涵盖所有情况。 我在这里该怎么办? 谢谢。
hex(0 <= i <= 65535);
应在0
到2^16 - 1
hex(0 <= i <= 65535);
对于int(-32768<=i<=32767)
它应该在-2^15
和2^15 - 1
int(-32768<=i<=32767)
当您需要有条件地分支超过+-2 ^ 15条指令(字节偏移=二进制补码16位<< 2)时,可以有条件地跳过可以到达目标的无条件跳转。
beq $s, $t, target # short jump, approx +- 2^17 bytes
与j
使用伪直接寻址 ,保持PC的前4位,用26位的<< 2立即更换休息。 这使您可以在与代码相同的对齐地址空间的1/16中到达任何目标地址。
bne $s, $t, .nojump
j target # anywhere with the same top 4 bits
.nojump:
与将地址放入寄存器并使用jr
到达任何32位地址相比:
bne $s, $t, .nojump
lui $t0, %hi(target)
ori $t0, $t0, %lo(target) # this is what la $t0, target does. It might use addui, but whatever
jr $t0
.nojump:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.