2016-03-09 7 views
1

Очень новы к этой концепции, и я ссылался на другие наборы инструкций там, но я пытался создать виртуальную машину, где я действительно кодирую инструкции.Инструкции по кодированию в 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. Какой тип я бы использовал, и чтобы сохранить это, я мог бы использовать союз, чтобы выкачать все это в один стоимость?

... Я совсем подхожу к этому?

+0

Обратите также внимание на то, что вам может потребоваться добавить '__attribute __ ((упакованный))' to 'struct instr' для обеспечения отсутствия между элементами. И 'uint64_t' - 8 байтов, а не 4 байта. С другой стороны, вы также можете выровнять элементы для производительности. – jotik

+0

@jotik К сожалению, я плохо разбираюсь в этой структуре :) – mosmo

+0

Кстати, что вы подразумеваете под * "в одно значение" *? Экземпляр 'instr' уже был бы единственным значением. Зачем тебе это нужно? – jotik

ответ

0

Вы бы кодировать его в одно значение типа struct instr:

struct instr a = { ... }; 

Переменная a является значение, которое можно присвоить другим переменным типа struct instr, проходят (по значению) при вызове функции, использовать как возвращаемое значение вызова функции и т. д. struct instr - это тип, который имеет значения, подобные встроенным типам (int, long и т. д.).

 Смежные вопросы

  • Нет связанных вопросов^_^