Представление инструкции в виртуальной машине

Я реализую виртуальную машину на C (это моя первая), и, чтобы быть независимой от платформы, я установил, что каждая инструкция занимает 4 байта в двоичном вводе (т.е. в файле байт-кода).

Мой вопрос: какова текущая практика представления инструкций?

Вы просто устанавливаете unsigned char [4] для представления каждой инструкции? Или используйте любое представление, которое вам нравится, при условии, что вы можете преобразовать в него эти 4-байтовые инструкции?

Заранее спасибо.


person Carsos    schedule 23.07.2012    source источник
comment
Фиксирована ли длина инструкций на уровне 32 бит? Или они могут иметь дополнительные операнды, увеличивающие длину?   -  person Some programmer dude    schedule 23.07.2012
comment
@JoachimPileborg: У них действительно могут быть дополнительные операнды.   -  person Carsos    schedule 23.07.2012


Ответы (1)


В основном я использую простые и «классические» виртуальные машины на основе стека, где байт-код — это просто байты. Все хранится в виде большого массива unsigned char, который я также пишу/читаю из файлов.

Я преодолеваю такие вещи, как порядок байтов, всегда записывая и читая операнды в определенном порядке. Немного медленнее выполнять чтение размером четыре байта, чтобы получить 32-битное целое число, но мне не нужно беспокоиться о порядке следования байтов, как если бы я использовал приведение для чтения одного int.

Еще один способ не беспокоиться о порядке байтов — просто и четко указать в руководстве, каков порядок байтов, и что попытка запустить двоичный файл в системе с другим порядком байтов приведет к странные ошибки. Затем вы можете использовать массив, например. int32_t вместо этого для хранения инструкций и операндов. Вероятно, это значительно упростит ваше кодирование, если это будет наименьшая единица в байтовом коде.

person Some programmer dude    schedule 23.07.2012