На титульной картинке статьи вы видите ассемблерный шаблон для создания диска в формате FAT32. Не все поля заполнены, поля отмеченные восклицательным знаком обязательны для заполнения, остальные можно игнорировать. Если диск должен нести какую-то ОС на "борту", то необходимо написать загрузочный код, который должен быть расположен после метки "loading".
Во время загрузки компьютера, биос грузит 0-й сектор в память по адресу 7с00h, и передает ему управление. Для доступа к адресам в памяти существует специальная директива ORG, то есть, если мы запишем в начале кода команду org 7c00h и поставим метку 55AAh в конце сектора, то наша программа будет рассматриваться машиной как загрузочный код.
До загрузки ОС доступны только функции и прерывания биос (0-19h), а также команды процессора. Попробуем с их помощью создать свой загрузочный сектор с активным исполнительным кодом.
Про $-$$, что это такое. Знак $ указывает на то место в коде, в котором находится в данный момент программа, правильней будет сказать: строка кода на которую указывают регистры CS:IP. Двойной $$ указывает на начало сектора. В последних двух байтах загрузочного сектора должно находиться "магическое" значение "55AAh", которое, собственно, и указывает компьютеру, что сектор является загрузочным.
Если набрать и откомпилировать в fasm-е предложенный выше код, то в итоге мы получим файл с расширением "*.bin", что с ним можно сделать? Здесь я могу предложить два варианта: первый - изменить расширение .bin на .img, в итоге получится загрузочный образ, который можно записать на флешку при помощи, например, rufus.exe. У вас появится загрузочная флешка, которая будет писать, при ее запуске, "Hello, User!!!" и это все, что она будетделать, после этого вам потребуется перезагрузить компьютер :)
второй вариант - воспользоваться эмулятором загрузки ОС bochs.exe. Этой программой пользуются обычно как раз для отладки загрузочных образов и для поиска загрузочных вирусов.
Самое главное и сложное - это правильно настроить борщ, воспользуемся самым простым вариантом - без сложных настроек:
Создаем ярлык борща и ложим его в отдельную папку, туда же ложим наш бинарник.
Кликаем по ярлыку и в появившемся окне выбираем из списка "Disk & boot", становится доступной клавиша "Edit", кликаем ее.
В новом окне кликаем клавишу "Browse..."
Disk image files = All files
выбираем наш бинарник (или образ)
Type of floppy media == 1.44M
Status == inserted
ok
save
закрываем борщ, у вас должен появиться файл - bochsrc.bxrc, кликаем его, в результате должно открыться вот такое окно:
рекомендую изучить файл bochsrc.bxrc с помощью notepad++.exe.
Это был так называемый вариант создания ROM-образа, который работает непосредственно в памяти, но что если мы хотим записать образ на диск?
Есть еще способ создания загрузочных дисков, но с ним нужно быть крайне осторожным, потому что все происходит в реальном режиме - ОС не защитит вас от ошибок! Если что, не говорите потом, что я не предупреждал!
Откомпилируйте предложенный ниже код, получившийся com-файл нужно запустить с флешки с установленной на ней dos-системой(MSDOS, FREEDOS и т.п.). Вообще, будет лучше, если вы поменяете команду
mov cl,1 ;первый сектор
на какой-то другой, неиспользуемый сектор, например:
mov cl,2
и после запуска проверите результат из-под виндоус с помощью любого hex-редактора, если все будет нормально, то можно будет пробовать эксперементировать с первым сектором "вживую". Объясняю почему:
mov dl, 80h
не гарантирует того, что вы сотрете первый сектор именно на флешке, а не на диске, которым вы пользуетесь. До восстановления данных мы пока еще не добрались, поэтому не рискуйте напрасно :)
надеюсь, что из комментариев более-менее понятно, что происходит в ходе выполнения программы.
#что такое MBR #загрузочный диск #загрузачный сектор #ассемблер