如何从我的机器码中掩盖我不想要的位?

时间:2017-10-07 00:59:05

标签: c bit-shift bitmask machine-code

所以我有一个txt文件,我正在使用02324020中的数字,这是MIPS指令中的机器代码:add $t0, $s1, $s2

如果它是二进制并切成6,5,5,5,5,6的部分,则所采用的数字为:0,17,18,8,0,20

这使得指令的概念为R [rd] = R [rs] + R [rt],26-31的数字为操作码0,表示R格式,rd = 8,rs = 17,rt = 18

我试图屏蔽这些位,所以我只看到21-25之间的位然后接收它们的数字:0,17,18,8,0,20因为向右移动:{ {1}}给我操作码0并告诉我它的R格式。

所以现在我试图找到17,但我不知道printf("\n%x\n", code >>26);之后要放置什么:

& 0b

我真的可以用一个例子来查找我的号码02324020

中的剩余号码

到目前为止,这是我的代码:

printf("\n%x\n", code >>21 & 0b____);

1 个答案:

答案 0 :(得分:1)

要定义二进制数字,您可以使用0b___(正如您在答案中提到的那样),而不是0x0b0___

要提取您需要的数字,您必须按位移code,以便您感兴趣的位位于最右端。然后OR只有你感兴趣的那些。把这些放在一起,你有:

printf("\n%x\n", code >> 26);
printf("\n%x\n", code >> 21 &  0b11111);
printf("\n%x\n", code >> 16 &  0b11111);
printf("\n%x\n", code >> 11 &  0b11111);
printf("\n%x\n", code >>  6 &  0b11111);
printf("\n%x\n", code       & 0b111111);