我在学习如何制作虚拟机时发现了这段代码。但我不知道这个功能是做什么的。你们有人知道这个函数是做什么的吗?
void decode( int instr )
{
instrNum = (instr & 0xF000) >> 12;
reg1 = (instr & 0xF00 ) >> 8;
reg2 = (instr & 0xF0 ) >> 4;
reg3 = (instr & 0xF );
imm = (instr & 0xFF );
}
变量instr
= 1。
最佳答案
该函数将变量 instr
中的特定 4 位组(称为 nibbles )保存到其他变量 instrNum
、reg1
、等等(这些其他变量必须具有全局范围,因为它们未在此处定义)。
例如,考虑 instr
是否为 0x1234
instrNum = (0x1234 & 0xF000) >> 12;
= (0x1000) >> 12;
= 1
reg1 = (0x1234 & 0xF00) >> 8;
= (0x0200) >> 8;
= 2
reg2 = (0x1234 & 0xF0) >> 4;
= (0x0030) >> 4;
= 3
reg3 = (0x1234 & 0xF);
= (0x0004);
= 4
imm = (0x1234 & 0xFF);
= (0x0034);
= 52
因此,它获取变量 instr
的每个半字节并将其保存到单独的变量中。最后一个变量 imm
获取最后一个字节。 &
和 >>
是位运算符,AND
operator用于分隔位和 right shift operator 。
为什么要保存这些变量是任何人的猜测,我们需要知道这些变量是什么类型以及它们的用途,但这就是正在发生的事情
关于C 奇怪的函数变量赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21829818/