Поиск 16-разрядного компилятора x86

Я работаю над проектом встроенных систем и столкнулся с проблемой компилятора, который программно встроен в Paradigm С++ IDE. Я хотел бы иметь возможность автоматизировать строительство.

Процессор - AMD186ES. Я не работаю с ОС - просто безболезненный материал. Мне нужно сгенерировать 16-битный 8086-машинный код реального режима из С++.

Мой googling указывает, что g++ может создавать такой код.

Мои вопросы:

Можно ли настроить g++ для создания этого машинного кода?

Есть ли еще компиляторы С++, которые могут это сделать?

Ответы

Ответ 1

В настоящее время я использую gnu as (часть binutils и ассемблер, использующийся для gcc), и я успешно собираю 16-битный ассемблерный код со следующим:

as <file>
ld --oformat binary -Ttext 0x0 -e start <file>

с моими файлами сборки, начиная с:

.code16
.globl start
.text
start:

так как его простой двоичный код, опуская строки,

.globl start
start:

просто даст предупреждение, даже если плоские двоичные файлы не нуждаются в начальной точке.


что-то я усвоил,

-Ttext 0x0

является критическим, в противном случае сегмент .text вытесняется за пределы диапазона 16 бит адресации (не спрашивайте меня почему)

Я лично все еще изучаю сборку, так что это только мой путь, не обязательно лучший способ.


EDIT: Если вы пишете загрузочный код, вы должны изменить

-Ttext 0x0

к

-Ttext 0x7c00

это приведет к смещению ваших адресов памяти с помощью 0x7c00, поскольку загрузочный код обычно загружается в BIOS 0x7c00.

Ответ 2

Лучше всего, вероятно, OpenWatcom, который включает компилятор С++. Назад в начале-середине 90-х, я считаю, что это был лучший компилятор C/С++. Несколько лет назад это было открыто.

Ответ 3

Разве ваш чип-продавец (AMD, я думаю) не имеет указателей на компиляторы для чипа?

Если нет, вы можете использовать некоторые 16-разрядные компиляторы DOS, но у вас будет несколько потенциальных больших проблем:

  • получение библиотеки для компилятора, которая не зависит от BIOS или MS-DOS
  • Отладка
  • линкеры для встроенных систем обычно имеют определенную поддержку для поиска кода в определенных областях памяти. Это обычно не входит в состав компиляторов для DOS, но вы можете найти какой-то компоновщик/локатор, который сделает трюк для вас.

Несколько компиляторов, которые по-прежнему поддерживаются и генерируют 16-разрядный код:

Ответ 4

Этот поиск google показывает серию ссылок для установки gcc в качестве кросс-компилятора. Чтобы заставить его нацелиться на нечто, отличное от стандартного двоичного файла ELF, вы можете завершить выход. В этой ссылке обсуждается исключение стандартных библиотек и настройка формата вывода. Возможно, вам придется немного поиграть, чтобы заставить его работать.

В качестве альтернативы openwatcom.org имеет версию компилятора Watcom C с открытым исходным кодом, которая также может делать то, что вы хотите.

Ответ 5

Там патч для GCC 4.3: Новый задний конец ia16: 16-бит Intel x86

И здесь обновление для него. Обратите внимание, что это, вероятно, не очень хорошо работает, например, обновленный пост говорит: "Конструкторы и деструкторы теперь поддерживаются, но по какой-то причине они работают только на конфигурации лосей".

Этот контейнер Docker имеет его сборку: https://registry.hub.docker.com/u/ysangkok/ia16-gcc-rask

Мне еще не удалось создать двоичные файлы DOS: Как собрать сборку GAS и связать ее с библиотекой Open Watcom C?

Ответ 6

Посмотрите bcc, который является 16-разрядным компилятором x86 C. Например, есть пакеты Debian для него.

Ответ 7

Самый последний по состоянию на 2014 год Dev86.

Ответ 8

Не уверен, но я думаю, что старая версия borland С++ смогла это сделать. вы можете скачать версию 5.5 t: здесь удачи

Ответ 9

Прошло много времени с тех пор, как я посмотрел на вещи Paradigm (они все еще вокруг?) - вы уверены, что у них нет эквивалентов командной строки для компилятора? Мое воспоминание о том, что они были построены поверх инструментария компилятора Borland... Так может быть, старая копия компиляторов Borland может сделать трюк?

- Ах, глядя немного дальше, я обнаружил, что Paradigm по-прежнему вокруг (www.devtools.com) продает инструменты X86. (Должно быть, дойная корова!)

Их профессиональный продукт включает в себя скрипты... В зависимости от объема работы, которую вы планируете делать, это может стоить того, чтобы укусить пулю и купить полное предложение...

Удачи.