Вопрос

Я работаю над проектом встроенных систем и столкнулся с проблемой, связанной с программным внедрением компилятора в 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, но у вас возникнет несколько потенциальных больших проблем:

  1. получение библиотеки для компилятора, не зависящей от BIOS или MS-DOS
  2. отладка
  3. компоновщики для встраиваемых систем обычно имеют специальную поддержку для размещения кода в определенных областях памяти.Обычно это не включается в компиляторы для 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.(Должно быть, дойная корова!)

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

Удачи.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top