【发布时间】:2009-04-15 02:00:59
【问题描述】:
我正在编写一个程序,我需要确定第 3 位和第 6 位是否已设置。我知道我可以旋转一个单词或向左/向右移动它。
但是我如何访问单个位的状态?我是否使用像 and/xor 这样的按位运算符?
【问题讨论】:
标签: assembly bit-manipulation mips
我正在编写一个程序,我需要确定第 3 位和第 6 位是否已设置。我知道我可以旋转一个单词或向左/向右移动它。
但是我如何访问单个位的状态?我是否使用像 and/xor 这样的按位运算符?
【问题讨论】:
标签: assembly bit-manipulation mips
您可以使用 0x08 和 0x40 进行按位运算(假设位 0 是最低位)。您将使用 andi 指令来执行此操作。
如果 $t0 是您要测试的值:
andi $t1, $t0, 0x08
andi $t2, $t0, 0x40
如果设置了第 3 位,$t1 将非零,如果设置了第 6 位,则 $t2 将非零。
【讨论】:
是的,您使用的是按位运算符。您可以使用仅设置第 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 汇编中测试单个位的一种技术是将所需位移动到最重要的位位置,并使用 bltz/bgez 来测试位的状态。这在无法使用 andi 指令选择所需位的情况下节省了一条指令。
【讨论】: