16位十六进制范围,用于mips汇编指令beq和bne

时间:2014-02-06 23:08:42

标签: assembly hex mips

我已经为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),但似乎并未涵盖所有情况。我该怎么办?感谢。

2 个答案:

答案 0 :(得分:0)

对于 df <- data.frame(currency = c("GBP", "GBP", "EUR", "EUR", "JPY"), amount = c(100, 200, 100, 200, 100), USDGBP = c(1.5, 1.5, 1.5, 1.5, 1.5), USDEUR = c(1.1, 1.1, 1.1, 1.1, 1.1), USDJPY = c(100, 100, 100, 100, 100)) for(curr in unique(df$currency)) { this_curr_rows <- df$currency == curr df$amount_usd[this_curr_rows] <- df$amount[this_curr_rows] / df[this_curr_rows, paste0("USD", curr)] } ,它应该在02^16 - 1之间 对于hex(0 <= i <= 65535);

,它应该在-2^152^15 - 1之间

答案 1 :(得分:0)

当您需要有条件地分支超过+ - 2 ^ 15指令(字节偏移= 2&#39; s补码16位&lt;&lt; 2)时,您可以有条件地跳过可以到达的非条件跳转目标

beq $s, $t,  target      # short jump, approx +- 2^17 bytes

VS。 j uses pseudo-direct addressing,保留PC的前4位,用26位&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; 2立即。这使您可以在与代码相同的1/16地址空间中到达任何目标地址。

bne $s, $t,  .nojump
j   target               # anywhere with the same top 4 bits
.nojump:

VS。将地址放入寄存器并使用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: