MIPS srl 由一个变量

MIPS srl by a variable

我进行了一些搜索,但似乎找不到答案。很可能是因为我不太确定如何表达它。

如果我有以下代码

for (i = 0; i < 10; i++) {
    x = y >> i
    ...
}

有没有办法在没有另一个循环的情况下实现 y >> i 指令?

我知道这行不通,但是说 i 的值存储在 $s1 中,执行此操作

srl $t3, $s5, $s1

而不是必须将 $t3 设置为 $s5 的值,然后循环遍历该语句 i 次

srl $t3, $t3, 1

希望这是有道理的。

基本上每次通过for循环我都想要y * 2^-i。

感谢您的帮助,甚至只是对这是一个重复问题的一些责备,我可以充满耻辱地阅读并得到答案。

面向程序员的 MIPS32™ 架构 第二卷:MIPS32™ 指令集 列出了以下移位指令:

  • SLL 逻辑左移字
  • SLLV 逻辑变量左移字
  • SRA 右移算术
  • SRAV 右移算术变量
  • SRL 逻辑右移字
  • SRLV 逻辑变量右移字

你感兴趣的是名称中带有变量的那些,它们的工作方式如下:

SLLV rd, rt, rs :  rd ← rt << rs
SRAV rd, rt, rs :  rd ← rt >> rs (arithmetic)
SRLV rd, rt, rs :  rd ← rt >> rs (logical)

仅使用 rs 的低 5 位,使您的移位量在 0-31 范围内。