IBM PC-совместимого компа[писюк]. Вначале немножко о мифах и реальностях.
Большинство программистов(особенно пишущих только на языке высокого уровня)
считают, что приложения могут работать только под управлением какой-либо
операционной системы[ось]. Будь то линух, форточки, дос -
все они обеспечивают набор системных функций для приложения.
Их строгое утверждение - "Приложение без оси работать НЕ будет" я и
попытаюсь здесь разрушить! Итак поехали...
1) Что происходит при включении писюка?
Как только нажимается кнопка Power - начинает работать программа, прошитая
во FLASH микросхемы памяти. Эта программа инициализирует начальную
программную среду - настраивает вектора прерываний, сегменты кода/стека/данных
и прочего. Следует отметить, что CPU находится в реальном режиме со всеми
вытекающими из него последствиями... Далее идёт Power On Self Test[пост],
который включает в себя - проверку перифералов на маме и
внешних(звуковуха/видео итд итп...). А также производится настройка
перифералов (режимы/адреса памяти/порты... бла, бла, бла короче...
И самое интересное наступает дальше - определяется с чего будет
идти продолжение программы. Если в CMOS Setup выбран первичный девайс загрузки-
флоппи-диск[дискета], то продолжение программы берётся с дискеты.
2) И всё-таки что-же дальше?
А дальше биосом считывается НУЛЕВОЙ сектор дискеты. Главное: сектор размером
всего-навсего 512 байт + содержимое этого сектора грузится в оперативу по
адресу 0x7C00 и передаётся управление туда!
3) И что-же делать?
Далее поступают следующим образом. Если приложение объёмом менее 512 байт,
то его можно просто исполнить. Только следует иметь ввиду, что в исходном
тексте программы должнна быть установлена директива "ORG 0x7C00", иначе
все адреса данных съедут! Вот например Turbo Assembler фирмы Борлянд[тасм] НЕ
поддерживает такую директиву и ориентирован на ДОС-ком-файлы, у которых
"ORG 0x100". Поэтому прийдётся извращаца - к каждому адресу данных прибавлять
число (0x7C00-0x100), что ОЧЕНЬ неудобно! Это только одно из обстоятельств,
которое побудило меня забить на тасм и поставить себе Flat Assembler[фасм]
Кроме того, тасм не позволяет получать бинарники с разными режимами адресации
"CODE16"+"CODE32" одновременно! А пользоваться префиксами 0x66 и 0x67 меня
осто*б*н*ло в своё время. А фасм всё это может - позволяя рожать бинарники,
не привязанные к конкретной оси. Плюс кроме файла fasm.exe больше
ничё не надо! В отличие от тасма, который требовал ещё и линкер...
Кроме того, фасм позволяет включать в проекты бинарники
(incbin "бинарник"), чего тасм не сделает!
Надеюсь, что с'агитировал фасм здесь очень хорошо

Поехали далее... Приложению можно делать всё что угодно - управлять
CPU и перифералами как вздумается + лезть по любым портам/адресам! Можно вызывать
прерывания BIOS! Про прерывания DOS,EMS,HIMEM и прочее - ЗАБУДЬТЕ!!! Их нет.
Можно писать также свои обработчики прерывания

...