Ищу 16-битный компилятор x86 - PullRequest
12 голосов
/ 23 октября 2008

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

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

Мой поиск в Google указывает, что G ++ может создавать такой код.

Мои вопросы:

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

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

Ответы [ 10 ]

10 голосов
/ 23 октября 2008

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

7 голосов
/ 23 октября 2008

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

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

7 голосов
/ 23 октября 2008

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

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

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

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

4 голосов
/ 24 августа 2014

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

4 голосов
/ 02 мая 2013

Есть патч для GCC 4.3: Новый бэкэнд ia16: 16-битный Intel x86

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

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

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

3 голосов
/ 11 октября 2012

В настоящее время я использую 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 BIOS.

3 голосов
/ 23 октября 2008

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

1 голос
/ 23 октября 2008

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

0 голосов
/ 25 октября 2008
0 голосов
/ 23 октября 2008

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

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

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

Удачи.

...