You are on page 1of 7

Ministerul Educaiei al Republicii Moldova

Universitatea Tehnic a Moldovei


Facultatea Calculatoare, Informatic i Microelectronic
Catedra Automatic i Tehnologii Informaionale

RAPORT
Lucrare de laborator Nr.1
Disciplina: Sisteme de operare. Mecanisme interne i principii de proiectare

Tema: Dezvoltarea bootloader-ului de sistem

A efectuat:

st.Gr TI-121 A.Cobla

A verificat:

lector universitar I.Antohi

Chiinu 2014

Obiectivele lucrarii:
Dezvoltarea peopriului bootloader i nscrierea acestuia pe dischet.
Condiii:
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.
Realizarea sarcinii:
Pentru a efectua aceast lucrare de laborator am avut nevoie de compilatorul nasm,
folosit pentru compilarea fiierelor .asm i o aplicaie care nscrie fiiere pe primul sector
al dischetei.
Compilatorul nasm l-am descrcat de pe sit-ul oficial nasm.us i l-am instalat,
procedura de instalare fiind una standart.
Pentru a obine dintr-un fiier n format .asm unul .com este destul s deschidem
nasmul i s introducem urmtoare instruciune: nasm numefisier.asm o bin f
numefisier.com(vezi n Figura 1).

Figura 1 Compilarea n nasm


Aplicaia care nscrie fiiere pe primul sector al dischetei se numete rawwrite, are o
interfa simpl i este uor de lucrat cu ea. Astfel pentru a nscrie bootloader-ul pe care l-

am creat pe dischet a fost deajuns s aleg fiierul n format .com i s aps butonul write
(vezi n Figura 2).

Figura 2 Interfaa aplicaiei RawWrite


Codul surs a bootloader-ului:
jmp near start
boot_id
boot_b_kl
boot_SinCL
boot_resS
boot_FATs
boot_rootEl
boot_SinDSK
boot_discr
boot_SinFAT
boot_SinCIL
boot_heads
boot_hidS
boot_countS
boot_sign
boot_SN
boot_label
boot_IDFS
start:

db
dw
db
dw
db
dw
dw
db
dw
dw
dw
dd
dw
db
dd
db
db

0,0,0,0,0,0,0,0
512
1
1
2
224
2880
0F0h
9
18
2
0
0
0
0
255,255,0,0,0,0,0,0,0,0,0
1,0,0,0,0,0,0,0

[ORG 0]
jmp 07C0h:_start

;Goto segment 07C0

msg1
lmsg1

db 'Laboratorul'
EQU $-msg1

msg2
lmsg2

db 'nr1'
EQU $-msg2

msg3
lmsg3

db 'SOMIPP'
EQU $-msg3

msg4
lmsg4

db 'Cobilas'
EQU $-msg4

msg5
lmsg5

db 'Adrian'
EQU $-msg5

msg6
lmsg6

db 'Exempu de text nr1'


EQU $-msg6

msg7
lmsg7

db 'Exempu de text nr2'


EQU $-msg7

msg8
lmsg8

db
EQU

'Exempu de text nr3'


$-msg8

color db 09,07,05,02,04,06
space db 57,46,35,20,10,5
_start:
; Update the segment registers
mov ax, cs
mov ds, ax
mov es, ax
mov ax, 03
int 10h
mov si,0
a:
call printfirstrow
call printallrow
call interrup
call clear
call interrup
inc si
cmp si,6
je b
jne a
b:

;curatirea ecranului

mov si,0
jmp a
printfirstrow:
mov
mov
mov
mov
mov
mov
mov
mov
int

ah,13h
al,1
bh,0
bl,[color+si]
cx,lmsg1
dh,8
dl,25
bp,msg1
10h

;numarul functiei
;write mode (advance cursor, ASCII string)
;numarul paginii video active
;attribute (blue on black)
;string length
;rindul de afisare
;coloana de afisare

mov
mov
mov
mov
mov
mov
mov
mov
int

ah,13h
al,1
bh,0
bl,[color+si]
cx,lmsg2
dh,8
dl,37
bp,msg2
10h

;numarul functiei
;write mode (advance cursor, ASCII string)
;numarul paginii video active
;attribute (blue on black)
;string length
;rindul de afisare
;coloana de afisare

mov
mov
mov
mov
mov
mov
mov
mov
int

ah,13h
al,1
bh,0
bl,[color+si]
cx,lmsg3
dh,8
dl,41
bp,msg3
10h

;numarul functiei
;write mode (advance cursor, ASCII string)
;numarul paginii video active
;attribute (blue on black)
;string length
;rindul de afisare
;coloana de afisare

mov
mov
mov
mov
mov
mov
mov
mov
int

ah,13h
al,1
bh,0
bl,[color+si]
cx,lmsg4
dh,8
dl,48
bp,msg4
10h

;numarul functiei
;write mode (advance cursor, ASCII string)
;numarul paginii video active
;attribute (blue on black)
;string length
;rindul de afisare
;coloana de afisare

mov
mov
mov
mov
mov
mov
mov

ah,13h
al,1
bh,0
bl,[color+si]
cx,lmsg5
dh,8
dl,56

;numarul functiei
;write mode (advance cursor, ASCII string)
;numarul paginii video active
;attribute (blue on black)
;string length
;rindul de afisare
;coloana de afisare

mov bp,msg5
int 10h
ret
printallrow:
mov
mov
mov
mov
mov
mov
mov
mov
int

ah,13h
al,1
bh,0
bl,09
cx,lmsg6
dh,10
dl,[space+si]
bp,msg6
10h

;numarul functiei
;write mode (advance cursor, ASCII string)
;numarul paginii video active
;attribute (blue on black)
;string length
;rindul de afisare
;coloana de afisare

mov
mov
mov
mov
mov
mov
mov
mov
int

ah,13h
al,1
bh,0
bl,09
cx,lmsg7
dh,12
dl,[space+si]
bp,msg7
10h

;numarul functiei
;write mode (advance cursor, ASCII string)
;numarul paginii video active
;attribute (blue on black)
;string length
;rindul de afisare
;coloana de afisare

mov
mov
mov
mov
mov
mov
mov
mov
int

ah,13h
al,1
bh,0
bl,09
cx,lmsg8
dh,14
dl,[space+si]
bp,msg8
10h

;numarul functiei
;write mode (advance cursor, ASCII string)
;numarul paginii video active
;attribute (blue on black)
;string length
;rindul de afisare
;coloana de afisare

ret
interrup:
mov cx,000ah
mov dx,0000h
mov ah,86h
int 15h
ret
clear:
mov ax, 03
int 10h
ret

;curatirea ecranului

times 510-($-$$) db 0
dw 0AA55h

Interfaa bootloader-ului:

Figura 3 Interfaa bootloader-ului


Concluzii:
Efectund aceast lucrare de laborator am obinut deprinderi practice n lucru cu
limbajul assembler, am aflat cum se creeaz un bootloader i cum se nscrie acesta pe o
dichet. n aceast lucrare am utilizat ntreruperi BIOS i anumite funcii pentru afiarea
textului i am aflat cum se utilizeaz acestea n anumite cazuri.
Comform condiiei am afiat pe centrul ecranului 4 mesaje, unul dintre care clipete i
-i schimb culoare iar celelalte se mica de la dreapta spre stnga.