You are on page 1of 9

Universitatea Tehnica a Moldovei

Filiera Francofona Informatica

Rapport
La SOMIP

Lucrare de laborator nr.1

Dezvoltarea bootloader-ului de sistem

Efectuat de st. gr. FI-131

Verificat de profesorul:

Chiinu 2015

Obiective: Dezvoltarea peopriului 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.
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.

Conideratii teoretice
O dischet obinuit folosete un sistem de fiiere denumit FAT( de la File Allocation Table Tabel de alocare a
fiierelor). n urma formatrii spaiul de stocare al unei dischete este divizat n urmtorul fel:
Avnd n vedere c o dischet are dou fee, se adun n total un numr 2880 de sectoare, care pot stoca
1,457,560 de baii (2880512).
Dac un fiier de 4 KB (4096 de baii) va ocupa 8 sectoare, un fiier de 500 KB (512.000 baii) va ocupa 1000 de
sectoare din cele disponibile.
In cel mai simplist mod putem spune ca bootloaderul este programul/codul executat in momentul n care un
computer pornete. Orice mainrie care ruleaz un sistem de operare are implementat un bootloader. Bootloaderul
este o component foarte important n funcionarea oricrei astfel de mainrii i fr bootloader nu poate porni. n
bootloader pot exista anumite programe de securitate care verific dac sistemul ce urmeaz s fie ncrcat este unul
autentic sau nu.
Sectorul citit de BIOS la ncrcarea FDD-ului(0:A) are adresa 0xAA55 ce reprezint un offset de 510bytes de
pe dischet.
Teoretic acesta reprezint primul sector, care l vom seta pentru ncrcarea kernel-ului de sistem dezvoltat la
urmtoarele lucrri de laborator.
Atunci cnd BIOS-ul va citi boot loader-ul de pe primul sector al dischetei, codul compilat n fiierul nostru
ASM va fi ncrcat pe adresa 0:07C00h, de unde propriu zis, vom suprancrca regitrii.

Crearea unui loader ce va afia un mesaj

Datele sectorului 1 al pistei 0, dispozitivul de citire-scriere 0 i suportul de disc 0, pentru


primul disc, care a rspuns (dischet sau hard disc) sunt ncrcate la adresa absolut 0000:7c00, iar
controlul va

fi transmis la aceast adres. Pentru un hard disc, acest cod din sectorul rdcin

determin n realitate compartimentul activ al discului, dup care ncarc i execute sectorul rdcin al
acestui compartiment. Prin acesta controlul este transmis si stemului de operare activ al discului.

Pentru a utiliza doar 5 culori am

Pentru a deplasa mesajele in dreapta

utilizat o secventa de cod care functionezaa

ecranlui atunci cind ajung la pozitia zero am

ca o instructiune if:

utilizat un cod similar:

cmp bl,5

cmp pozitie,0

jb incrementeaza

jle setCol

anuleaza:

decr:

mov dx,pozitie

mov bl,1

sub dl,5

jmp endifblock

jmp endifpoz

incrementeaza:

setCol: mov pozitie,65

inc bl;

mov dx,pozitie

jmp endifblock

jmp endifpoz

endifblock:

endifpoz: nop

nop

Pentru inscrierea bootloaderului pe floppy se folosesc programele RawWrite, ImDisk si VirtualBox.

Fig.1- Rularea programului in emulator

Fig. 2 - Rularea programului in VirtualBox

Concluzie
In aceasta lucrare de laborator am invatat cum sa salvam si sa citim date de pe discheta virtuala. In
limbajul de asamblare am creat un fisier .bin care care se executa la incarcarea sistemului de pe discheta
afisind 4 mesaje in centrul ecranului. Primul clipeste si iti schimba culoarea fiecare 2 secunde,
urmatoarele 3 se deplaseaza de la dreapta la stinga. Intreruperile 10h i 13h sunt folosite de func ia bios
disk pentru mai multe operaii asupra discurilor, n cazul dat nscrierea pe dischet.

Bibliografie
1.Assembly if AND.[Resursa electronica].- Regim de acces:
http://stackoverflow.com/questions/7883433/assembly-if-and
2.Assembly 8086 ,range of a 16 bit register and cmp.[Resursa electronica].- Regim de acces:
http://stackoverflow.com/questions/20873016/assembly-8086-range-of-a-16-bit-register-and-cmp
3.Timer interrupts in assembly.[Resursa electronica].- Regim de acces:
http://www.microchip.com/forums/m812420.aspx

Anexa
Anexa A
Listingul programului
#make_bin#
mov
org 7c00h

.MODEL

; set location counter.

SMALL

.STACK

bl, 01h ;

mov pozitie,65

iteratie:

100h

.DATA

mov dl,33 ;coloana

mesaj DB "SOMIPP"
lmesaj

mov dh,9 ;rindul

EQU $-mesaj

mov cx, lmesaj

mesaj2 DB
lmesaj2

mov bp,offset mesaj

EQU $-mesaj2

mov ax,1300h

mesaj3 DB "Laborator nr. 1"


lmesaj3

int 10h

EQU $-mesaj3

mesaj4 DB "FI-131"
lmesaj4

EQU $-mesaj4

push bx;

buf Dw ?

mov bl,9;

pozitie dw ?

cmp pozitie,0

.CODE
start:

jle setCol

;mov ax,@data
;mov ds,ax
;mov es,ax

; registrul de

segment ES poate fi umplut cu un


numar doar ;folosind registrul AX
;mov ax,1300h
BIOS-ului - display string

decr:

mov dx,pozitie
sub dl,5
jmp endifpoz

; functia
setCol: mov pozitie,65

mov dx,pozitie

jb incrementeaza

jmp endifpoz

anuleaza:
mov bl,1
jmp endifblock

endifpoz: nop
;mesaj2

incrementeaza:

mov pozitie,dx

inc bl;

mov dh,12

jmp endifblock

mov cx, lmesaj2


mov bp,offset mesaj2

endifblock:
nop

mov ax,1300h
int 10h
;mesej3
mov bl,9

;stergem
mov buf,bx;
mov bl,0;

mov dh,13 ;rindul


mov cx, lmesaj3

mov dl,35 ;coloana

mov bp,offset mesaj3

mov dh,10 ;rindul

mov ax,1300h

mov cx, lmesaj

int 10h

mov bp,offset mesaj


;mesej4

mov ax,1300h
int 10h

mov bl,9
; stergem mesaj 2
mov dh,14 ;rindul

mov dx,pozitie

mov cx, lmesaj4

mov dh,12

mov bp,offset mesaj4

mov cx, lmesaj2

mov ax,1300h

mov bp,offset mesaj2

int 10h

mov ax,1300h

pop bx;

int 10h

mov buf,0

; stergem mesaj 3
mov dx,pozitie

;timer 2s

mov dh,13

MOV AH,0x86

mov cx, lmesaj3

MOV CX,001eh

mov bp,offset mesaj3

MOV DX,8480h

mov ax,1300h

int 0x15

int 10h

; stergem mesaj 4
cmp bl,5

mov dx,pozitie

mov dh,14

jne iteratie

mov cx, lmesaj4


mov bp,offset mesaj4

Exit: mov ax,4c00h

mov ax,1300h

END Start

int 10h
mov bx,buf

INT 19h

; reboot

times 510-($-$$) db 0
cmp dl,200