使用 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);
假设我有一个变量 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);