位操作或掩码

时间:2017-10-16 19:25:18

标签: c bit-manipulation mips bitmask risc

假设我有一个包含编码MIPS指令的变量inst。我想将rt字段设置为0而不更改其他字段。 rt字段是从16-20索引的5比特字段。我第一次尝试:

inst = inst & ~(1 << 16);

将rt字段设置为0.然后我想将新变量new_reg的值放入rt字段。我试过了:

inst = inst | (new_reg << 16);

有人能确认这两行代码是否正确吗?

1 个答案:

答案 0 :(得分:1)

我认为问题在于你的第一个位掩码。命令(1&lt;&lt; 16)仅屏蔽第一位,其中要屏蔽16-20中的所有位。尝试:

inst = inst & ~(0x3f << 16)

然后:

inst = inst | (new_reg << 16);