1. Так же как linux и windows запускаются без каких-либо систем
Как бы перефразируя одного известного сатирика. Linux уже система.
Надеюсь вы это понимаете?
2. Да нужно чтобы получился exe-шный бинарник разрядностью в 16 бит
Требуется отделить вызов BIOS и MS-DOS друг от друга. Есть библиотеки которые используют исключительно функции BIOS. Другие задействуют системные вызовы MS-DOS для тех же самых операций. Вызывать функции BIOS'а очень удобно из ассемблера. Возьми тот же самый формат исполняемых файлов MS-DOS типа COM и подготовь в своей программе все функции загрузки и выполнения бинарных файлов 16-бит. Можешь писать это на Си встроенном в gcc, примеров навалом. Главное чтобы ты понимал как устроен твой код, в какой обстановке он должен работать, в каком месте кода какая функция и как вызывается и самое важное с какими параметрами. Я так понимаю что ты хочешь сделать программу, которая будет не зависеть от системы. Но эта программа тогда сама станет системой. И что она будет делать такая система? Выводить строку символов средствами BIOS?
А знаешь ли ты, что средства BIOS вообще не знают что такое файл?
3. обязательно на C
Да хоть на паскале inline() или на ассемблере db 0EAh
В языке Си, если ты его более-менее знаешь есть возможность писать команды в HEX формате. И компилировать их как они есть.
Если сделаешь, то познаешь работу программистов эпохи отсутствия языков высокого уровня.