Documente Academic
Documente Profesional
Documente Cultură
Rapport
La SOMIP
Verificat de profesorul:
Chişinău 2015
Obiective: Dezvoltarea peopriului bootloader si inscrierea acestuia pe discheta.
Condiții: Pentru acestă lucrare de laborator vom face cunostință cu limbajul de programare
assembler,
și vom utiliza întreruperile BIOS pentru a înțelege modul în care vom dezvolta propriul nostru boot
loader.
1. Afișarea pe centrul ecranului - a unui mesaj, ce va fi citit într-un singur offset.
2. Afișarea 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.Afișarea 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 mișca orizontal pe centrul ecranului de la dreapta spre stînga în ciclu
periodic.
Conideratii teoretice
O dischetă obişnuită foloseşte un sistem de fişiere denumit FAT( de la File Allocation Table – Tabel de alocare a
fişierelor). în urma formatării spaţiul de stocare al unei dischete este divizat în următorul fel:
Având în vedere că o dischetă are două feţe, se adună în total un număr 2880 de sectoare, care pot stoca
1,457,560 de baiţi (2880×512).
Dacă un fişier de 4 KB (4096 de baiţi) va ocupa 8 sectoare, un fişier de 500 KB (512.000 baiţi) 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 pornește. Orice mașinărie care rulează un sistem de operare are implementat un bootloader. Bootloaderul
este o componentă foarte importantă în funcționarea oricărei astfel de mașinării și fără bootloader nu poate porni. În
bootloader pot exista anumite programe de securitate care verifică dacă sistemul ce urmează să fie încărcat este unul
autentic sau nu.
Sectorul citit de BIOS la încărcarea 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 încărcarea kernel-ului de sistem dezvoltat la
următoarele lucrări de laborator.
Atunci când BIOS-ul va citi boot loader-ul de pe primul sector al dischetei, codul compilat în fișierul nostru
ASM va fi încărcat pe adresa 0:07C00h, de unde propriu zis, vom supraîncărca regiștrii.
iteratie:
.MODEL SMALL
.STACK 100h mov dl,33 ;coloana
.DATA mov dh,9 ;rindul
mesaj DB "SOMIPP" mov cx, lmesaj
lmesaj EQU $-mesaj mov bp,offset mesaj
mesaj2 DB mov ax,1300h
lmesaj2 EQU $-mesaj2 int 10h
mesaj3 DB "Laborator nr. 1"
lmesaj3 EQU $-mesaj3
mesaj4 DB "FI-131"
push bx;
lmesaj4 EQU $-mesaj4
mov bl,9;
buf Dw ?
pozitie dw ?
cmp pozitie,0
jle setCol
.CODE
start: ;mov ax,@data
decr: mov dx,pozitie
;mov ds,ax
sub dl,5
;mov es,ax ; registrul de segment ES
jmp endifpoz
poate fi umplut cu un numar doar ;folosind
registrul AX
;mov ax,1300h ; functia BIOS-ului - setCol: mov pozitie,65
;mesej3
mov bl,9
;stergem
mov dh,13 ;rindul mov buf,bx;
mov cx, lmesaj3 mov bl,0;
mov bp,offset mesaj3
mov ax,1300h mov dl,35 ;coloana
int 10h mov dh,10 ;rindul
;mesej4 mov cx, lmesaj
mov bp,offset mesaj
mov bl,9 mov ax,1300h
int 10h
cmp bl,5
; stergem mesaj 4 cmp dl,200
mov dx,pozitie jne iteratie
mov dh,14
mov cx, lmesaj4 Exit: mov ax,4c00h
mov bp,offset mesaj4 END Start
mov ax,1300h
int 10h INT 19h ; reboot
mov bx,buf times 510-($-$$) db 0