Ищу 16-битный компилятор x86.
-
03-07-2019 - |
Вопрос
Я работаю над проектом встроенных систем и столкнулся с проблемой, связанной с программным внедрением компилятора в Paradigm C++ IDE.Я хотел бы иметь возможность автоматизировать строительство.
Процессор AMD186ES.Я не работаю с ОС - просто железо.Мне нужно сгенерировать 16-битный машинный код 8086 реального режима из C++.
Мои поиски в Google показывают, что G++ может создавать такой код.
Мои вопросы:
Можно ли настроить g++ для создания этого машинного кода?
Существуют ли другие компиляторы C++, которые тоже могут это сделать?
Решение
Сейчас я использую 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-битного диапазона адресации (не спрашивайте меня, почему)
Лично я все еще изучаю ассемблер, так что это всего лишь мой путь, не обязательно лучший.
РЕДАКТИРОВАТЬ: Если вы пишете загрузочный код, вам следует изменить
-Ttext 0x0
к
-Ttext 0x7c00
это сместит ваши адреса памяти на 0x7c00
поскольку загрузочный код обычно загружается в 0x7c00
через биос.
Другие советы
Лучше всего вам, вероятно, OpenWatcom , который включает в себя компилятор C ++. Еще в начале-середине 90-х годов я считаю, что это был лучший компилятор C / C ++. Это было с открытым исходным кодом несколько лет назад.
Разве у вашего поставщика чипов (я думаю, AMD) нет никаких указаний на компиляторы для чипа?
Если нет, вы можете использовать некоторые 16-битные компиляторы DOS, но у вас возникнет несколько потенциальных больших проблем:
- получение библиотеки для компилятора, не зависящей от BIOS или MS-DOS
- отладка
- компоновщики для встраиваемых систем обычно имеют специальную поддержку для размещения кода в определенных областях памяти.Обычно это не включается в компиляторы для DOS, но вы можете найти какой-нибудь компоновщик/локатор, который поможет вам.
Вот несколько компиляторов, которые все еще поддерживаются и генерируют 16-битный код:
Этот поиск в Google показывает серию ссылок для настройки gcc в качестве кросс-компилятора. Чтобы заставить его предназначаться для чего-то отличного от стандартного двоичного файла ELF, вы можете сжать вывод. В этой ссылке обсуждаются исключение стандартных библиотек и настройка формата вывода. Возможно, вам придется немного поиграть, чтобы заставить его работать.
В качестве альтернативы openwatcom.org имеет версию Watcom с открытым исходным кодом. Компилятор Си, который также может делать то, что вы хотите.
Самым последним по состоянию на 2014 год является Dev86 .
Существует патч для GCC 4.3: Новый серверная часть ia16: 16-разрядная версия Intel x86
И вот обновление для него . Обратите внимание, что это, вероятно, не очень хорошо работает, например, в обновленном посте говорится: «Конструкторы и деструкторы теперь поддерживаются, но по какой-то причине они работать только в конфигурации elks. "
Этот Docker-контейнер имеет следующую сборку: https: // registry.hub.docker.com/u/ysangkok/ia16-gcc-rask р>
Мне пока не удалось создать бинарные файлы для DOS: Как собрать сборку GAS и связать ее с библиотекой Open Watcom C?
Посмотрите на bcc , который представляет собой 16-разрядный компилятор x86 C. Например, есть также пакеты Debian для него .
Не уверен, но я думаю, что старая версия borland c ++ могла это сделать. Вы можете скачать версию 5.5 t: здесь удачи
Прошло много времени с тех пор, как я просматривал материалы Paradigm (они еще существуют?) - вы уверены, что у них нет эквивалентов командной строки для компилятора?Насколько я помню, они были созданы на базе набора инструментов компилятора Borland...Так может быть, старая копия компилятора Borland поможет?
- Ах, выглядя немного еще больше, я нахожу, что парадигма все еще существует (www.devtools.com), продавая инструменты x86.(Должно быть, дойная корова!)
Их профессиональный продукт включает в себя сценарии...В зависимости от объема работы, которую вы планируете выполнить, возможно, стоит стиснуть зубы и купить их полное предложение...
Удачи.
80186 бесплатный компилятор C:
http: //coding.derkeiler .com / Архив / Общие / comp.arch.embedded / 2005-09 / msg01063.html