这个概念很新,而且我一直在引用其他指令集,但我一直在尝试创建一个虚拟机来实际编码指令。
这就是我所拥有的:
ua.example.com
基本上我有一个指令,它有一个1字节的操作码,一个1字节的目标和一个8字节的立即值。因此,例如,假设mov的操作码为0,并且A寄存器为0,将值50移动到的enum OPCODE {
MOV,
};
enum TARGET {
A, B,
};
struct instr {
unsigned char opcode;
unsigned char target;
uint64_t immediate;
};
移动指令将为0,0,50。
我如何将其编码为单个值?该指令加起来是一个80位/ 10字节的值,据我所知,它不是C中的本机类型。我会使用什么类型,并存储这个,我可以使用一个联合将它们全部压缩成一个值?
......我正在接近这个吗?
答案 0 :(得分:0)
您可以将其编码为struct instr
类型的单个值:
struct instr a = { ... };
变量a
是一个值,您可以将其分配给struct instr
类型的其他变量,在调用函数时传递(按值),用作函数调用的返回值等。 struct instr
类型的值类似于内置类型(int
,long
等)。