Краткий ответ: ваша программа на C ++ должна выводить 18-битные значения в формате, ожидаемом вашей необычной машиной.
Нам нужна дополнительная информация, в частности, тот формат, который ожидает ваша "необычная машина", илиточнее, формат, который должен выводить ваш ассемблер.Как только вы поймете, какой формат выходного файла вы генерируете, ответ должен быть простым.
Один возможный формат - я здесь все продумываю - это то, что мы могли бывозьмите две из ваших 18-битных инструкций:
instruction 1 instruction 2 ...
MSB LSB MSB LSB ...
bits → ABCDEFGHIJKLMNOPQR abcdefghijklmnopqr ...
... и запишите их в 8-битный / байтовый файл следующим образом:
KLMNOPQR CDEFGHIJ 000000AB klmnopqr cdefghij 000000ab ...
... это в основном устраиваетзначения в форме "little-endian", с 6 нулевыми битами, дополняющими 18-битные значения до 24 бит.
Но я предполагаю: заполнение, little-endianness, количество бит /байт и т. д. Без дополнительной информации трудно сказать, является ли этот ответ хотя бы отдаленно близким к правильному, или это именно то, что вам нужно.
Другая возможность - это плотная упаковка:
ABCDEFGH IJKLMNOP QRabcdef ghijklmn opqr0000
или
ABCDEFGH IJKLMNOP abcdefQR ghijklmn 0000opqr
... но я сделал предположение о том, куда идут угловые дела.