Как Вы уже могли догадаться, я не руками формирую файл x86data.c. Эту идею я позаимствовал из Nasma - создаётся файл с данными, в удобном для обращения с ним формате, а уже из него генерируется файл на C. Для подобных манипуляций предназначен script на любимом мною Perlе inst.pl.
Он запускается примерно так:
perl inst.pl [параметры командной строки]
где параметры могут быть следующими:
Проверить файл заголовков на наличие ошибок. В настоящее время реализованы только две проверки - на наличие дублирующихся itype, а также поиск пропущенных itype. Отчёт помещается в file.
Задаёт имя файла данных. Имя по умолчанию - data
Задаёт имя файла заголовков. Имя по умолчанию - x86.h
Генерирует файл-шаблон file для дальнейшего заполнения его данными.
Устанавливает имя выходного файла. Имя по умолчанию - x86data.c. Если выходной файл уже существует - программа сообщает об этом и завершает исполнение, существующий файл не модифицируется.
Игнорировать инструкции из файла заголовков, помеченные комментариями с тремя вопросительными знаками.
Показывает краткую инструкцию по использованию программы...
Эта замечательная программа сильно сокращает время создания файла с данными. Она автоматизирует проверку файла заголовков, может сгенерировать файл шаблон для дальнейшего заполнения его данными, и самое главное - она сама генерирует файл с данными, при этом проверяя его правильность и производя оптимизацию по размеру - структуры с одинаковыми данными представлены в выходном файле только один раз, используются несколько указателей на эти структуры. В случае же, если я (или кто-либо ещё) захочет добавить ещё какие-либо характеристики к каждой инструкции, script можно легко переписать для включения в него необходимой функциональности.
Формат входного файла для inst.pl:
# комментарии [имя инструкции] keyword: data ...
[имя инструкции] - это название инструкции, взятое из файла заголовков. Я не использую численных значений (хотя это было бы быстрее в обработке) по той причине, что Вам всё равно нужно будет для каждого численного значения находить мнемоническое имя из файла заголовков. Когда inst.pl запускается с ключом -n, она генерирует файл, в котором будут прописаны в таком виде мнемоники всех инструкций из файла заголовков.