16-битный компилятор C для разработки ядра в реальном режиме?

Я пробовал почти все компиляторы C с любыми настройками, и мне еще предстоит найти компилятор C, который может скомпилировать C в код Intel x86, подходящий для разработки ядра реального режима. Мне не нужны рассуждения о том, почему вы должны использовать защищенный режим; Мне просто нужно знать, какой компилятор C (и, если необходимо, с какими настройками его запускать) требуется для компиляции 16-битного автономного двоичного файла без зависимостей от ОС и т. д. Просто «голое железо» в реальном режиме и ничего более.

Я почти уверен, что это не дубликат [16-битного кода C для ядра реального режима]: 16-битный код C для ядра реального режима, потому что они приняли переключение в защищенный режим в качестве ответа, и я прямо заявил, что результат ДОЛЖЕН работать для реального режима.


person Joseph Caruso    schedule 15.09.2016    source источник
comment
Я знаю, что это не по теме, но я все равно опубликую это и возложу на читателя ответственность сказать мне, где я должен был опубликовать это вместо этого. Эм, нет. Это не так работает...   -  person John3136    schedule 15.09.2016
comment
Почему именно мой вопрос был отклонен? Было бы достаточно простого ответа на этот вопрос в ________, а не здесь.   -  person Joseph Caruso    schedule 15.09.2016
comment
@John3136 John3136 Хорошо, а где вы предлагаете задать этот вопрос? Есть ли другая ветка StackOverflow, которая подходит под эту категорию?   -  person Joseph Caruso    schedule 15.09.2016
comment
В последнее время есть и другие подобные вопросы. (последние 2 дня). Я рекомендую OpenWatcom с компоновщиком JLOC для работы с 16-битным загрузчиком. Но если вы хотите пойти по опасному пути псевдо взломанного GCC в реальном режиме, вот простой загрузчик, который печатает hello world с прерываниями BIOS: capp-sysware.com/misc/ircasm/gccboot   -  person Michael Petch    schedule 15.09.2016
comment
Я провел много исследований по этому вопросу, и мне жаль, что я не могу дать ответ на этот вопрос. Но позвольте мне дать вам ответ. Если вы проверите историю компилятора C, почти все компиляторы получены из переносимого C. Также есть комплект Amsterdam Compiler Kit, который может компилировать 16-битные файлы dos com, и он имеет лицензию BSD, что намного лучше, чем лицензия openwatcom... Здесь можно увидеть еще несколько инструментов. : thefreecountry.com/compilers/cpp.shtml   -  person Abdurrahim    schedule 14.05.2021


Ответы (1)


C не предназначен для работы в реальном режиме и поэтому, к сожалению, не поддерживает 16-битную компиляцию.

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

Я предлагаю посмотреть эту вики и форум, полный единомышленников и руководств http://wiki.osdev.org/Main_Page

Удачи!

person grantperry    schedule 15.09.2016
comment
Я ценю ваш подробный ответ со ссылками и пояснениями, но я хорошо знаком с osdev (я там участник :) Я свободно разбираюсь в сборке синтаксиса Intel и постоянно использую NASM. Мне просто интересно, если C также мог бы выполнить эту работу. Я надеялся, что это можно сделать, но да ладно.. Спасибо :) - person Joseph Caruso; 15.09.2016
comment
Из исследований и предыдущего удивления я пришел к выводу, что C не является жизнеспособным вариантом для реального режима :( извините, я не мог помочь :) - person grantperry; 15.09.2016
comment
Напротив! Вы помогли. Вы ответили на мой вопрос так, как нужно было ответить, и это все, о чем я просил, так что спасибо. :) - person Joseph Caruso; 15.09.2016
comment
Действительно? В каком режиме работала программа на Си, скомпилированная древними компиляторами от MS и Borland для DOS? Не говоря уже о компиляторах K&R для PDP11. - person Serge; 15.09.2016
comment
Дело не в том, что C (язык) не предназначен для работы в реальном режиме. Есть 16-битные компиляторы, например bcc. Большая проблема заключается в том, что обычные компиляторы (gcc и clang) почти не поддерживают 16-разрядность. Это правда, что чистый ISO C не имеет сегментации как части языка, поэтому, если вам нужно работать с несколькими сегментами, может быть проще просто использовать asm напрямую. - person Peter Cordes; 15.09.2016
comment
Есть ли бэкэнд LLVM для реального режима x86? Должно быть легко узнать. - person BitTickler; 15.09.2016
comment
Я не профессионал в области DOS, но я считаю, что программы скомпилированы в 16-битном режиме и должны работать с DOS в качестве хоста, предоставляя функции более высокого уровня, которые, я считаю, могут не иметь желаемого эффекта исходного вопроса @Serge - person grantperry; 15.09.2016
comment
@PeterCordes Я попробовал BCC ... К сожалению, он взял совершенно хороший исходный файл C и выдал ошибки из самого простого кода C. Не уверен, что даже безопасно называть его компилятором C с тем, насколько базовым кодом C он подавился. - person Joseph Caruso; 15.09.2016
comment
lists.llvm.org/pipermail/llvm-dev/2014- Январь/069344.html, хотя и немного устарел, создает впечатление, что llvm имеет 16-битную целевую установку. - person BitTickler; 15.09.2016
comment
@JosephCaruso: Как что? Я не думаю, что он особенно хорошо поддерживается, но я предположил, что он, по крайней мере, поддерживает C89. Он задохнулся от функций C99, таких как for (int i=0 ; i<10 ; i++){}? C89 технически все еще является C, поэтому, если это проблема, вы должны сказать, что вы также не заинтересованы в том, чтобы ограничиваться устаревшей формой языка. - person Peter Cordes; 15.09.2016
comment
@teenHack42 ты не прав. Программа C может работать на чистом металлическом процессоре с помощью небольшого ассемблерного кода начальной загрузки. - person Serge; 15.09.2016
comment
@BitTickler: gcc также имеет режим -m16, но в основном он по-прежнему генерирует те же инструкции, что и для 32-битного режима, но с .code16, поэтому большинство инструкций имеют префикс размера операнда и/или размера адреса. (например, int по-прежнему 32-битный). Это то, на что похож бэкэнд LLVM? - person Peter Cordes; 15.09.2016
comment
C не предназначен для работы в реальном режиме и поэтому, к сожалению, не поддерживает 16-битную компиляцию. - Эм, что? Как вы думаете, когда был создан язык C и на каких компьютерах? И какие особенности C делают его несовместимым с реальным режимом? - person user253751; 15.09.2016
comment
Не только C, но даже C++ компилировался для 16-битной версии: winworldpc.com/product/visual-c/1x - person Abdurrahim; 14.05.2021