Sunteți pe pagina 1din 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 db 0,0,0,0,0,0,0,0
boot_b_kl dw 512
boot_SinCL db 1
boot_resS dw 1
boot_FATs db 2
boot_rootEl dw 224
boot_SinDSK dw 2880
boot_discr db 0F0h
boot_SinFAT dw 9
boot_SinCIL dw 18
boot_heads dw 2
boot_hidS dd 0
boot_countS dw 0
boot_sign db 0
boot_SN dd 0
boot_label db 255,255,0,0,0,0,0,0,0,0,0
boot_IDFS db 1,0,0,0,0,0,0,0
start:

[ORG 0]

jmp 07C0h:_start ;Goto segment 07C0


msg1 db 'Laboratorul'
lmsg1 EQU $-msg1

msg2 db 'nr1'
lmsg2 EQU $-msg2

msg3 db 'SOMIPP'
lmsg3 EQU $-msg3

msg4 db 'Cobilas'
lmsg4 EQU $-msg4

msg5 db 'Adrian'
lmsg5 EQU $-msg5

msg6 db 'Exempu de text nr1'


lmsg6 EQU $-msg6

msg7 db 'Exempu de text nr2'


lmsg7 EQU $-msg7

msg8 db 'Exempu de text nr3'


lmsg8 EQU $-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 ;curatirea ecranului


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:
mov si,0
jmp a

printfirstrow:

mov ah,13h ;numarul functiei


mov al,1 ;write mode (advance cursor, ASCII string)
mov bh,0 ;numarul paginii video active
mov bl,[color+si] ;attribute (blue on black)
mov cx,lmsg1 ;string length
mov dh,8 ;rindul de afisare
mov dl,25 ;coloana de afisare
mov bp,msg1
int 10h

mov ah,13h ;numarul functiei


mov al,1 ;write mode (advance cursor, ASCII string)
mov bh,0 ;numarul paginii video active
mov bl,[color+si] ;attribute (blue on black)
mov cx,lmsg2 ;string length
mov dh,8 ;rindul de afisare
mov dl,37 ;coloana de afisare
mov bp,msg2
int 10h

mov ah,13h ;numarul functiei


mov al,1 ;write mode (advance cursor, ASCII string)
mov bh,0 ;numarul paginii video active
mov bl,[color+si] ;attribute (blue on black)
mov cx,lmsg3 ;string length
mov dh,8 ;rindul de afisare
mov dl,41 ;coloana de afisare
mov bp,msg3
int 10h

mov ah,13h ;numarul functiei


mov al,1 ;write mode (advance cursor, ASCII string)
mov bh,0 ;numarul paginii video active
mov bl,[color+si] ;attribute (blue on black)
mov cx,lmsg4 ;string length
mov dh,8 ;rindul de afisare
mov dl,48 ;coloana de afisare
mov bp,msg4
int 10h

mov ah,13h ;numarul functiei


mov al,1 ;write mode (advance cursor, ASCII string)
mov bh,0 ;numarul paginii video active
mov bl,[color+si] ;attribute (blue on black)
mov cx,lmsg5 ;string length
mov dh,8 ;rindul de afisare
mov dl,56 ;coloana de afisare
mov bp,msg5
int 10h

ret

printallrow:

mov ah,13h ;numarul functiei


mov al,1 ;write mode (advance cursor, ASCII string)
mov bh,0 ;numarul paginii video active
mov bl,09 ;attribute (blue on black)
mov cx,lmsg6 ;string length
mov dh,10 ;rindul de afisare
mov dl,[space+si] ;coloana de afisare
mov bp,msg6
int 10h

mov ah,13h ;numarul functiei


mov al,1 ;write mode (advance cursor, ASCII string)
mov bh,0 ;numarul paginii video active
mov bl,09 ;attribute (blue on black)
mov cx,lmsg7 ;string length
mov dh,12 ;rindul de afisare
mov dl,[space+si] ;coloana de afisare
mov bp,msg7
int 10h

mov ah,13h ;numarul functiei


mov al,1 ;write mode (advance cursor, ASCII string)
mov bh,0 ;numarul paginii video active
mov bl,09 ;attribute (blue on black)
mov cx,lmsg8 ;string length
mov dh,14 ;rindul de afisare
mov dl,[space+si] ;coloana de afisare
mov bp,msg8
int 10h

ret

interrup:
mov cx,000ah
mov dx,0000h
mov ah,86h
int 15h
ret

clear:
mov ax, 03 ;curatirea ecranului
int 10h

ret
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.

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