Очень новы к этой концепции, и я ссылался на другие наборы инструкций там, но я пытался создать виртуальную машину, где я действительно кодирую инструкции.Инструкции по кодированию в C
Это то, что я получил:
enum OPCODE {
MOV,
};
enum TARGET {
A, B,
};
struct instr {
unsigned char opcode;
unsigned char target;
uint64_t immediate;
};
В принципе у меня есть инструкция, которая имеет 1 байт кода операции, цель на 1 байт, и непосредственное значение 8 байт. Так, например, инструкция перемещения, такая как: MOV A, 50
, которая перемещает значение 50 в a, будет 0, 0, 50, если код операции mov равен 0, а регистр A равен 0.
Как бы это сделать, одно значение? Команда добавляет значение 80 бит/10 байтов, которое, насколько мне известно, не является родным типом в C. Какой тип я бы использовал, и чтобы сохранить это, я мог бы использовать союз, чтобы выкачать все это в один стоимость?
... Я совсем подхожу к этому?
Обратите также внимание на то, что вам может потребоваться добавить '__attribute __ ((упакованный))' to 'struct instr' для обеспечения отсутствия между элементами. И 'uint64_t' - 8 байтов, а не 4 байта. С другой стороны, вы также можете выровнять элементы для производительности. – jotik
@jotik К сожалению, я плохо разбираюсь в этой структуре :) – mosmo
Кстати, что вы подразумеваете под * "в одно значение" *? Экземпляр 'instr' уже был бы единственным значением. Зачем тебе это нужно? – jotik