C函数变量赋值
我在学习如何制作虚拟机时发现了这段代码。但我不知道这个函数是做什么的。你们知道这个函数在做什么吗C函数变量赋值,c,function,hex,C,Function,Hex,我在学习如何制作虚拟机时发现了这段代码。但我不知道这个函数是做什么的。你们知道这个函数在做什么吗 void decode( int instr ) { instrNum = (instr & 0xF000) >> 12; reg1 = (instr & 0xF00 ) >> 8; reg2 = (instr & 0xF0 ) >> 4; reg3 = (instr & 0xF ); imm
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
中“读取”位,并将结果写入其他字段。此函数将变量instr
中的特定4位集(调用)保存到其他变量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
获取最后一个字节&
和>
是位运算符,用于分离位和位。
为什么要保存这些是任何人的猜测,我们需要知道这些变量是什么类型以及它们的用途,但这就是正在发生的事情。这个函数似乎将指令
instr
解码为4位指令代码(instNum
),以及多达三个寄存器的4位代码(reg1
到reg3
)。在您的虚拟机中,似乎还存在立即8位操作数(imm
)的编码。下面是我对VM的16位指令集的猜测的示例:
绝对不是“每个字节”,你指的是“半字节”因为这些是4位字段。在学习如何制作虚拟机之前,先学习C语言ant不是运算符。Google和wikipedia可能会有所帮助。感谢大家的回答!我不可能要求更好的回答!你的最后一句话是什么意思?你们给出的所有答案都很好!我真的了解发生了什么事很抱歉,但我可以再问一个问题吗?创建虚拟机时,您是否必须将指令编码为1和0,或者直接使用某种形式的自定义汇编代码解释指令是否有任何错误?