使用 or 掩码进行位操作

Bit manipulation with or mask

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

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

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

inst = inst | (new_reg << 16);

谁能确认这两行代码是否正确?

我认为问题出在您的第一个位掩码上。命令 (1 << 16) 仅屏蔽第一位,您要屏蔽 16-20 的所有位。尝试:

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

然后:

inst = inst | (new_reg << 16);