Поиск 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. (Должно быть, дойная корова!)
Их профессиональный продукт включает в себя скрипты... В зависимости от объема работы, которую вы планируете делать, это может стоить того, чтобы укусить пулю и купить полное предложение...
Удачи.
Ответ 10
80186 бесплатный компилятор C:
http://coding.derkeiler.com/Archive/General/comp.arch.embedded/2005-09/msg01063.html