【发布时间】:2016-09-08 09:59:50
【问题描述】:
对于这个位域提取问题,解决方案手册中的答案似乎是错误的。我的问题发布在下面。
提出的问题是:
找出最短的 MIPS 指令序列来提取一个 来自 $t0 的字段,用于常量值 i = 22 和 j = 5,并将该字段放入 $t1 格式如数据表所示。
解决方案手册给出了这个答案:
lui $t1, 0x003f ori $t1, $t0, 0xffe0 and $t1, $t0, $t1 srl $t1, $t1, 5
我有两个问题:
- 右边的零。这个建议的答案如何确保寄存器 $t1 中“字段”右侧的所有位都为零?
-
逻辑右移。最后一条指令不应该是
sll $t1, $t1, 10吗?
【问题讨论】:
-
2.是的,我认为它需要以左移结束才能将字段放在寄存器的顶部。一种简单的方法是将字段右移到底部,然后左移到顶部。除非移位指令在 MIPS 上真的很慢,否则两个移位应该比 4 个指令好。
-
谢谢,这正是我在检查解决方案之前的回答。也感谢您的编辑。
标签: assembly bit-manipulation mips cpu-registers mips32