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 范围内。
我进行了一些搜索,但似乎找不到答案。很可能是因为我不太确定如何表达它。
如果我有以下代码
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 范围内。