Ассемблер. BIOS. Hello World. Инструменты для создания загрузочного сектора.

    При очередной установке — переустановке Visual Studio под C++, тот чего-то себя вести плохо начал : проекты не создавал, старые не открывал. В общем что то криво у него там встало и пошло, причём до этого его устанавливал — работал нормально. Вот я и «психанул», послал все эти пропиетарные Тяжёлые среды разработки, и вспомнил, что давно хотел ассемблером заняться. Да и интересно всегда было, как там всё внутри работает у больших компьютеров.    

Вот и полез я значит в эти дебри, ну и вы заодно вместе со мной :mail: 

 

Рассказ будет для самых маленьких. Писать будем на FASM. Здесь есть небольшая документация по компилятору. Отсюда брал исходный код для тестирования. Ну и самое главное, использовал для своей задачи архаичный флоппи диск, купленный на AliExress, так как есть в наличии старый ноутбук с флоппиком. И к стати да, это будет тестовая программка, которая будет лежать в загрузочном секторе флоппи диска, и её будет запускать BIOS после старта.

Исходник

use16
org 0x7c00
start:
mov ax,cs
mov ds,ax

mov si,message
cld                                           ; направление для строковых данных
mov ah,0x0e
mov bh,0x00
puts_loop:
lodsb                                       ; загружаем очерёдный символ в al
test al,al                                  ; нулевой символ означает конец строки
jz puts_loop_exit
int 0x10
jmp puts_loop
puts_loop_exit:
jmp $

message:
db ‘Hello World!’,0

finish:
times 0x1fe-finish+start db 0
db 0x55,0xaa                          ; сигнатура загрузочного диска

Запускаем текстовый редактор компилятора (FASMW.exe) и закидываем этот небольшой демонстрационный код в него. Далее его сохраним под любым именем (у меня просто test.asm) и затем компилируем исходник. На выходе получится BIN  файл. Это было не самое трудное в нашей задаче. Самое интересное — это чем всё это записать на нулевую дорожку первого сектора дискеты. Как всегда было перерыто дофига форумов и статей, и в результате поиска наконец то нашёл нужную программку DM Disk Editor. Ну и дальше в картинках:

По подсказке, нажимаем на иконку выбора диска
Я в своём случае выбрал USB Floppy.
Внимание!
При выборе диска, будьте внимательны, так как записав нашу программку не туда куда нужно, можно потерять свои разделы на жёстких дисках
Программа начинает чтение секторов
В итоге выводится HEX таблица прочитанных секторов
Заходим в меню Сервис и выбираем команду Копирование секторов. В окне копирования выбираем Источник — это наш скомпилированный BIN файл, ну а приёмник — Флоппи диск.
Подтверждаем галочкой на перезапись сектора
Вот наш итоговый первый сектор с нулевой дорожкой. Там наш код, ну и как положено, видно строку Hello word, которую мы будем выводить.

Ну и как бы всё. В BIOSе выбираем загрузку с флоппи диска, и ждём результата — белые буковки на чёрном экране:

Продолжение

avatar

Денис ZX

г. Орехово-Зуево

Ассемблер. BIOS. Hello World. Инструменты для создания загрузочного сектора.: 4 комментария

  1. Эхх когда то я тоже увлекался программированием , Микроша , Агат , БК , но потом появились PC шки и показалось, что все уже написано за нас и на много лет вперед , но я был не прав , что все это бросил и забыл.

  2. БКашку и я начинал программировать. Застал её уже под конец. сначала Бейсик. Потом машинные коды заносил в ОЗУшку через Монитор (это программа такая :yes: ), предварительно конечно сначала на бумажке писал на ассемблере. Так я написал и запустил Редактор дампа памяти. Ну а потом я пошёл в армию

Добавить комментарий