Пытаюсь разобраться с низкоуровневым программированием. Поставил задачу — написать "Hello World"-программу, записать её на флешку, перезагрузиться, запустить программу с флешки (не запуская ОС). Можно ли это сделать на С или С++? Как дать понять биосу, что её надо загрузить в память, выполнить? Что из себя должна представлять программа? Исполняемый файл .com? .bin файл? Слышал, это должно быть 16-bit приложение. Если ли какие-то ограничения в названии программы? Немного не по теме: Стоит ли пользоваться MASM? Какой Ассемблер сейчас наиболее популярен для x86? Заранне Спасибо!
Ответ Можно и на C/C++, но в очень урезанном виде - практически никаких библиотек. К вашим услугам только функции BIOS (int 13h) (Т.е. ваш "Hello, world" не должен выводиться ни с помощью puts или printf, ни тем более в cout). Никакой main в качестве входной точки (если только не измените соответствующим образом рантайм загрузчик). Т.е. только какие-то базовые вещи (типа арифметики :)), которые компилируются в .obj, и линкуются с начальным загрузчиком на ассемблере. Когда-то интереса ради урезал Turbo C++ до такого состояния - очень даже ничего получалось :) Я в свое время использовал TASM - отлично подходил для таких целей. Работать этот код начинает в реальном режиме, так что только 16 бит, причем (мы же о PC?) грузится он в память по адресу 0000:7С00 и начинает выполняться оттуда. Грузится он из MBR, так что если это что-то более-менее большое - то сразу должен сам считать и загрузить остальное в память. Считайте, что com-файл DOS, только никаких org 100h - что получено, то просто положено в очень конкретную :) память - и на диске, и в RAM, и управление передается первому байту. Соответственно, какое уж тут название программы... Название (файла) - это уже файловая система, а тут ею и не пахнет. Мой совет: виртуальная машина с виртуальным дисководом для дискет :), грузящаяся с такой виртуальной дискеты. Первый сектор - ваш. Это позволит вам делать, что хотите, ничем не рискуя, и очень легко записывать ваше творение в файл, не мучаясь с записью в конкретные сектора на диске/флешке (при этом можно легко натворить неприятностей).