我已经为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),但似乎并未涵盖所有情况。我该怎么办?感谢。
答案 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)]
}
,它应该在0
和2^16 - 1
之间
对于hex(0 <= i <= 65535);
-2^15
和2^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: