【问题标题】:How do I access the state of individual bits of a word in MIPS?如何访问 MIPS 中单词的各个位的状态?
【发布时间】:2009-04-15 02:00:59
【问题描述】:

我正在编写一个程序,我需要确定第 3 位和第 6 位是否已设置。我知道我可以旋转一个单词或向左/向右移动它。

但是我如何访问单个位的状态?我是否使用像 and/xor 这样的按位运算符?

【问题讨论】:

    标签: assembly bit-manipulation mips


    【解决方案1】:

    您可以使用 0x08 和 0x40 进行按位运算(假设位 0 是最低位)。您将使用 andi 指令来执行此操作。

    如果 $t0 是您要测试的值:

    andi $t1, $t0, 0x08
    andi $t2, $t0, 0x40
    

    如果设置了第 3 位,$t1 将非零,如果设置了第 6 位,则 $t2 将非零。

    【讨论】:

      【解决方案2】:

      是的,您使用的是按位运算符。您可以使用仅设置第 3 位和第 6 位的位掩码进行与操作。然后与零进行比较。

      类似的东西(我很久没做汇编了):

      and     r2, r1, 0x48  # r2 = r1 & 0x48
      cmp     r2, 0x48
      jz     zzzzzz   #jmp to zzzzz if bits 6 and 3 are set
      

      【讨论】:

      • 我不做 mips,但是如果设置了第 3 位 6,那不会跳转吗?
      • 你是对的。我马虎了。它应该是与 0x48 的比较,然后是 jz 而不是 jnz。
      • 在人们发表评论后,我可以编辑我的答案以解决问题吗?
      【解决方案3】:

      在 MIPS 汇编中测试单个位的一种技术是将所需位移动到最重要的位位置,并使用 bltz/bgez 来测试位的状态。这在无法使用 andi 指令选择所需位的情况下节省了一条指令。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-10-17
        • 1970-01-01
        • 2013-10-08
        • 1970-01-01
        • 2015-12-16
        • 2020-11-03
        • 1970-01-01
        相关资源
        最近更新 更多