Mutim mbr

Mutim mbr

Acest articol vreau să ajut pe oricine începe să înțeleagă crearea de sisteme de operare și despre asta, și anume cu scris MBR. În acest articol, voi încerca să vorbesc despre crearea MBR.bin în practică și, în general, să descriu cât mai mult posibil acest lucru în detaliu și interesant. Ei bine, vom scrie, desigur, pe FASM'e.







Despre încărcătoarele de încărcare

Acest sector este denumit Master Boot Record (MBR). La începutul MBR, codul mașinii de încărcare este localizat, urmat de tabela de partiții, care descrie schema de partiționare a discurilor logice. La sfârșitul sectorului de boot există o semnătură 55AAh, spunând BIOS-ul că este într-adevăr MBR și nu altceva.

Încărcătorul trebuie să analizeze tabela de partiții, să găsească unitatea logică preferată, să citească primul său sector (se numește bootable) și să-i dea controlul. Puteți spune că acesta încarcă încărcătorul OS.

Structura descrierii secțiunii

Odată cu structura MBR, am continuat formarea unui binar de 512 octeți. Primul lucru pe care trebuie să-l facem este să scrieți codul de încărcare. Apoi trebuie să compilați o tabelă de partiție pe disc și să adăugați semnătura 55AAh. Acum vom încerca să scriem un încărcător simplu, afișând mesaje despre etapele muncii sale.

Deci, iată MBR-ul nostru:

; aceste două directive nu au loc în program.

; Cel de-al doilea determină compilatorul să genereze un cod pe 16 biți

Structura pentru citirea LBA

Dacă citirea eșuează din anumite motive, BIOS-ul stabilește steagul de transmisie. În acest caz, săriți la eroare, care va afișa mesajul de eroare pe linia a 2-a (pe locul 1 - "MBR încărcat") și suspendați aparatul.

În continuare apare codul funcției, care afișează mesaje despre detectarea și eroarea sectorului de pornire. În principiu, munca lor a fost deja descrisă mai sus, trebuie doar să spuneți că lucrează și prin BIOSprintstring.







Aceasta completează codul MBR executabil principal. Dar asta nu e tot. Nu am analizat încă funcțiile BIOSprintstring și BIOSreadkey, precum și structura pentru citirea LBA. Următoarea linie de cod - include „BIOSFunctions.ink“, atunci este timpul să ia în considerare BIOSreadkey și BIOSprintstring că, după cum sugerează și numele de utilizare BIOS întrerupe.

Pentru a economisi spațiu (512 octeți nu este de cauciuc), introduse adesea folosite pentru a întrerupe funcția, care, la rândul său, a pus în dosarul .ink, care este conectat la capătul MBR noastre.

Iată cum arată fișierul BIOSFunctions.ink:

; așteptați ca tasta să fie apăsată

Funcțiile utilizate în încărcătorul nostru sunt descrise aici.

Să începem cu BIOSprintstring. Se extrage codul cheie transmis de pe stivă, compară-l pentru a citi de la tastatură și dacă se potrivesc întoarce la codul de asteptare - dacă nu, repetați acești pași din nou.

Cred ca merita explicat de ce este sp + 02h. În primele două octeți (deoarece codul este de 16 biți) avem un punct de retur din funcție. Deoarece octeți sunt plasate în memoria (și stivă - o memorie), în ordine inversă, octeții transmis, pe care am pus pe stiva ultima (treci codul ca 00XXh-cheie) va fi în partea din față.

Citiți caracterul de la tastatură prin intermediul funcției 00h a interfeței int 16h. După apelarea întreruperii în al, codul tastei presate va fi plasat.

Acum ieșirea de linie este funcția BIOSprintstring. Acesta primește offsetul liniei, lungimea șirului, rândul și coloana de la începutul liniei, emite șirul și returnează controlul la codul chemat.

Aici obținem datele din stiva de instrucțiunile pop. Prin urmare, vom salva punctul de retur. Am păstrat-o în registru și, deoarece registrul bp este ocupat pentru o întrerupere a funcției.

Utilizați atributul în bl, nu atingeți cursorul

Utilizați atributul în bl, mutați cursorul la sfârșitul liniei

Utilizați simbolul pentru format de șir, atributul; simbol, atribut; nu atingeți cursorul

Utilizați simbolul pentru format de șir, atributul; simbol, atribut; mișcați cursorul la capătul liniei

Sub funcțiile funcției de întrerupere 13h int 10h

Culorile textului (alte 8 culori pot fi obținute prin setarea bitului de luminozitate)

Funcțiile sunt examinate - acest lucru încheie codul. Numai structurile de date au rămas.

În primul rând, aici sunt linie de ieșire MBR, aici vom vedea liniile în limba engleză, așa cum caracterul rus am citit, după cum urmează: „MBR încărcat“, sectorul de boot găsit „și“ eroare“.

Asta e tot! Ultimii 2 octeți indică BIOS-ului că acesta este într-adevăr un MBR.







Trimiteți-le prietenilor: