Assembly 从寄存器中提取字段的MIPS指令

Assembly 从寄存器中提取字段的MIPS指令,assembly,bit-manipulation,mips,cpu-registers,mips32,Assembly,Bit Manipulation,Mips,Cpu Registers,Mips32,解决方案手册中的答案对于这个位字段提取问题似乎是错误的。我的问题发布在下面 以下是设置: 提出的问题是: 查找提取数据的最短MIPS指令序列 对于常量值i=22和j=5,字段从$t0开始,并将字段放入$t1 以数据表中显示的格式 解决方案手册对此给出了答案: 我有两个问题: 右边的零。这个建议的答案如何确保寄存器$t1中“字段”右侧的所有位都是零 右移逻辑。最后一条指令不是应该是sll$t1,$t1,10吗 很明显,解决方案手册中的答案并不理想 右边的零。这个建议的答案如何确保 寄存器$t1

解决方案手册中的答案对于这个位字段提取问题似乎是错误的。我的问题发布在下面


以下是设置:

提出的问题是:

查找提取数据的最短MIPS指令序列 对于常量值i=22和j=5,字段从$t0开始,并将字段放入$t1 以数据表中显示的格式

解决方案手册对此给出了答案:

我有两个问题:

  • 右边的零。这个建议的答案如何确保寄存器$t1中“字段”右侧的所有位都是零
  • 右移逻辑。最后一条指令不是应该是
    sll$t1,$t1,10吗

  • 很明显,解决方案手册中的答案并不理想

  • 右边的零。这个建议的答案如何确保 寄存器$t1中“字段”右侧的位都是零
  • 通过正确组合
    andi
    sll
    ,我们可以将所有需要归零的位归零

  • 右移逻辑。最后一条指令不是应该是sll吗 1美元,1美元,10美元

  • 很明显,这应该是一个
    sll
    操作,而不是
    srl
    操作。

    2。是的,我认为它需要以左移位结束,以将字段置于寄存器的顶部。一个简单的方法是将字段右移到底部,然后左移到顶部。除非MIPS上的轮班指令真的很慢,否则两班倒应该比四班好。谢谢,这正是我检查解决方案之前的答案。谢谢你的编辑。我觉得回答我自己的问题很有趣,所以如果我违反了任何礼节,请让我知道。如果你在其他人之前找到解决方案,鼓励你回答自己的问题。此外,您可能已经使用不同的方法获得了问题不同部分的多个答案。所以,如果5名回复者每人提供20%的答案,请向上投票,然后发布你自己的综合答案[归因很好]。如果一个答案是90%以上,请投票并接受它。投票选出其他好的答案。在这里,90%以下的注释就足够了,可能会详细说明您添加的内容。大多数问题没有得到自我回答,主要是因为他们从别人那里得到了如此好的答案。这主要是为了避免冗余。对于简单的(r)内容,您可以编辑您的问题,并将更改后的代码附加到底部。永远不要编辑原始代码——它会改变问题的性质并使回答无效(即它们不再有意义)。不管你愿不愿意,你都可以这样做。再一次,谢谢,这真的很有帮助!下次我必须这样做的时候,我会记住这些。写一个格式很好的答案来解释这个解决方案是一个很好的方法,让它对未来的读者有用。即使评论帮助你找到了答案,也没关系。很高兴你接受了我的评论,并把它变成了一个很好的书面回答,因为我不会花时间去做。编写和格式化答案是一项非常有用的工作,需要时间,所以你肯定会因此而受到表扬。如果你只是复制/粘贴评论而没有添加任何价值,你可以回答“社区维基”以避免获得信任,但这里的情况并非如此。
    lui $t1, 0x003f
    ori $t1, $t0, 0xffe0
    and $t1, $t0, $t1
    srl $t1, $t1, 5