Sunteți pe pagina 1din 9

Chiinu 2016

Obiective
Dezvoltarea propriului bootloader si inscrierea acestuia pe discheta.

Condiii
Pentru acest lucrare de laborator vom face cunostin cu limbajul de programare
assembler, i vom utiliza ntreruperile BIOS pentru a nelege modul n care vom
dezvolta propriul nostru boot loader.
Ducem cont de modul in care BIOS-ul analizeaz sectoarele de pe dischet.
Sectorul citit de BIOS la ncrcarea FDD-ului(0:A) are adresa 0xAA55 ce reprezint un
offset de 510 bytes de pe dischet.
Teoretic acesta reprezint primul sector, care l vom seta pentru ncrcarea kernelului de sistem dezvoltat la urmtoarele lucrri de laborator.
Un exemplu de bootstrap este expus mai jos:
;**************************************
[BITS 16]
ORG

INT

0x18

TIMES 510-($-$$) DB 0
DW

0xAA55

;**************************************

Atunci cnd BIOS-ul va citi boot loader-ul de pe primul sector al dischetei, codul
compilat n fiierul nostru COM va fi ncrcat pe adresa 0:07C00h, de unde propriu zis,
vom suprancrca regitrii. Deci, sarcina este de a scrie un sector de boot, asamblat ntrun fiier binar simplu (conform unui punct de mai jos), care n final trebuie nscris pe
primul sector al discului, cu ajutorul aplicaiei voastre dezvoltata n C++/C#, Java etc.

Condiii conform baremului:


1 Afiarea pe centrul ecranului - a unui mesaj, ce va fi citit ntr-un singur offset.
2 Afiarea a 2 sau 3 mesaje pe centrul ecranului - citit minimum din 3 offset-uri.
Unul din aceste mesaje va clipi periodic cu un interval de 2 - 3s.
3 Afiarea a 4 sau 6 mesaje pe centrul ecranului - citit minimum din 8 offset-uri.
Unul din aceste mesaje va clipi periodic cu un interval de minim 2 - 3s i i va schimba culoarea
(minim 4 culori).
i celelalte mesaje se vor mica orizontal pe centrul ecranului de la dreapta spre stnga n ciclu
periodic.
Consideraii teoretice
Un bootloader este un program scris pentru a ncrca un kernel mai complex. Funciile lui sunt:
1

ncarc kernel-ul n memorie;

furnizeaz nucleului informaii de care are nevoie pentru a funciona corect;

comut la un mediu care kernel-ul va dori;

4. transfer de control la kernel.


Kernelul, ca i bootloaderul, este i el o component foarte important i vital n buna
funcionare a unui sistem de operare. Kernelul este responsabil de ncrcarea corect a driverelor
i de felul n care vor fi folosite ulterior resursele hardware, fie c e vorba de banalul card de
memorie, portul usb, camera foto sau wireless-ul.
Mersul lucrrii
1

Lansm aplicaia

Fig 1 Lansarea emu8086

Fig 2 Deschidere fisier

Pentru realizarea sarcinii de afiare a 4 mesaje pe centrul ecranul am realizat


urmtoarele proceduri, care folosesc ntreruperile BIOS:
- Delay procedur de realizeare a unei reineri de 800 milisecunde , care folosete funcia
0x86 a ntreruperii 0x15.
- ClearScreen curarea ecranului
- RestartMessages procedura restabilete poziia mesajelor n partea extreme din dreapta.
- ResetColour procedura reseteaza culoarea

- ResetConto reseteaza contorul


- Repeat functia care afiseaza textul si deplasarea lui spre dreapta
- sleep functia care afiseaza textul color si schimba culorile,la fel in timpul afisarii textului
colorat,textul care merge spre dreapta se opreste
Pentru definirea afisarii textului am folosit un macrou:
labSOMIPP macro x,y,col,size,mess
mov dl,x
mov dh,y
mov ah,02h
int 10h
mov cx,size
mov al,1
mov bl,col
mov bp,offset mess
mov ah,13h
int 10h
endm

Concluzii
n cadrul lucrrii de laborator Nr.1 am fcut cunotin cu emulatorul emu8086,
am studiat procesul make_boot. n cadrul lucrrii am realizat un macrou, am folosit
instruciunile de salt condiionat (JZ, JMP). Pentru definirea mesajelor,modului de
afisare a acestora am creat un macrou ,unde folosim intreruperea 10h,care se foloseste
pentru lucru cu terminalul grafic.Am ndeplinit condiia de crearea a unui bootloader i
nscrierea acestuie pe o dischet virtual.

Bibliografie
1 Documentation for emu8086 - assembler and microprocessor emulator, Daniel B.
Sedory
2 Emu 8086. [Resurs electronic].- regim de acces
http://muhendislik.istanbul.edu.tr/elektrikelektronik/wpcontent/uploads/2013/12/Emu808
6_tutorial. pdf
3 Complete 8086 instruction set. [Resurs electronic]- regim de acces
http://www.electronics.dit.ie/staff/tscarff/8086_instruction_set/8086_instruction_set.html#
CMP

ANEXE
ANEXA 1
Rezultatele afirii pe ecran

Fig 4 Rezultatele

ANEXA 2

#make_boot#
org 07c00h
mov di,0

; set location counter.

mov bl, 0100b


jmp Repeat

;Message Macro
labSOMIPP macro x,y,col,size,mess

mov dl,x
mov dh,y
mov ah,02h
int 10h
mov cx,size
mov al,1
mov bl,col
mov bp,offset mess
mov ah,13h
int 10h
endm
;Delay Macro
macro off msec
mov ah,86h
mov cx,msec
int 15h
endm

;Clear Screen proc


ClrScr:
pusha
mov dx,0000h
mov ax,0200h
int 10h
mov bx,0000h
mov ax,09DBh
mov cx,4000
int 10h
popa
ret
ResetColour:
mov color,0
mov di,0

Repeat:
mov dl, contor
cmp dl,50
je ResetContor
Cycle:
inc dl
inc di
mov contor, dl
labSOMIPP contor,7,1111b,9,mess1
labSOMIPP contor,9,1111b,9,mess2
labSOMIPP contor,13,1111b,9,mess3
labSOMIPP contor,15,1111b,9,mess4
off 4
call ClrScr
cmp di,5
je sleep
jmp Repeat
sleep:
inc dl
mov contor,dl
inc color
cmp color, 0Fh
je ResetColour
labSOMIPP contor,7,1111b,9,mess1
labSOMIPP contor,9,1111b,9,mess2
labSOMIPP contor,13,1111b,9,mess3
labSOMIPP contor,15,1111b,9,mess4
labSOMIPP 35,11,color,13,mess
off 5
mov di,0
call ClrScr
jmp Repeat
ResetContor:
mov dl,0
mov contor,dl
jmp Cycle

;=========================DataSegement================
mess db

'Hello, World!'

mess1 db

'Message 1'

mess2 db

'Message 2'

mess3 db

'Message 3'

mess4 db

'Message 4'

contor

db 0

color

db 0

S-ar putea să vă placă și