Sunteți pe pagina 1din 6

UNIVERSITATEA TEHNIC A MOLDOVEI

RAPORT
la disciplina

SOMIPP

Lucrare de laborator 2

TEMA: Dezvoltarea kernel-ului

A executat: st. gr. FI-121 dhfghxdf

A verificat: prof. Antohi Ion

CHIINU 2014
Condiii
Una din concepiile de baz, care servete pentru nelegerea corect a structurii sistemelor de
operare (SO), este concepia procesului. Acest termen a fost pentru prima dat utilizat n anii 60
de ctre elaboratorii SO MULTIX i se folosete pe larg n teoria SO. Exist mai multe definiii a
termenului proces, dintre care menionm:

1. Programul ce se execut;
2. Exemplarul programului, ce se executa la calculator;
3. Obiect, care poate fi identificat i executat de ctre procesor;
4. Unitatea de lucru, ce se caracterizeaz printr-un lan de activiti consecutive, stare curent i
setul de resurse de sistem alocate.

Procesul conine trei componente:

1. Codul ce trebuie executat;


2. Date necesare pentru lucrul programului (variabile, spaiul de lucru, bufer, .a.)
3. Contextul programului (cuvntul de stare a procesului).
4. Stiva procesului (counterul operatiilor proceselor)

Condiii:

Dezvoltarea nucleului se va efectua conform condiiilor de mai jos :

a) sectorul unde va fi nscris nucleul se va seta conform numrului de ordine din registrul grupei.
b) se vor utiliza ntreruperile : int 10h, 13h, 16h, 20h

La citirea sectorului boot de pe dischet, pe ecran vor fi afiate 2 mesaje ce vor cere efectuarea
urmtoarei operaiuni :

a) ncrcarea nucleului cu butonul ENTER


b) Restartarea sistemului la tastarea butonului ESC

Dup evenimentul de ncrcare a nucleului, pe ecran vor fi afiate 2 - 3 mesaje despre sistem.
Cursorul de text va fi ascuns din nucleu.

Codul surs:
Boot.asm
[BITS 16]
[ORG 0x7C00]
jmp loader

times 8 - ($-$$) db 0

loader:
jmp 0:loader2

loader2:
push cs
pop ds
call clrscr
MOV AH, 0x0E ;function nr
MOV BH, 0x00 ;page
MOV BL, 0x07 ;color

MOV SI, msg ;move msg to SI-pointer


CALL PrintString ;call function to print SI (msg)

read:
mov ah, 00h
int 16h

cmp al,13
jz kernel
cmp al,27
jz reboot
jmp read

JMP $ ;hang

reboot:
mov ax, 0040h
mov ds, ax
mov word[0072h], 000h
jmp 0ffffh:0000h
ret

kernel:
MOV DL, 0x0 ;drive 0 = floppy 1
MOV DH, 0x0 ;head (0=base)
MOV CH, 0x0 ;track/cylinder
MOV CL, 0x2 ;sector (1=bootloader, apparently sectors starts counting at 1 instead of 0)
MOV BX, 0x1000 ;place in RAM for kernel - I suppose randomly chosen on examples
MOV ES, BX ;place BX in pointer ES
MOV BX, 0x0 ;back to zero - also has something to do with RAM position

ReadFloppy:
MOV AH, 0x02
MOV AL, 0x01
INT 0x13
JC ReadFloppy ;if it went wrong, try again
;pointers to RAM position (0x1000)
MOV AX, 0x1000
MOV DS, AX
MOV ES, AX
MOV FS, AX
MOV GS, AX
MOV SS, AX

JMP 0x1000:0x0

sterge_tot_ecranu:
mov dx, 0 ; Position cursor at top-left
mov bh, 0
mov ah, 2
int 10h

mov ah, 6 ; Scroll full-screen


mov al, 0 ; Normal white on black
mov bh, 7 ;
mov cx, 0 ; Top-left
mov dh, 24 ; Bottom-right
mov dl, 79
int 10h
ret

PrintString:
.next_char:
MOV AL, [SI] ;current character
OR AL, AL
JZ .print_done ;if current char is zero, go to end
INT 0x10 ;print character
INC SI ;increase pointer to msg (next character)
JMP .next_char
.exit_char
RET
.print_done:
ret

clrscr:
mov dx, 0
mov bh, 0
mov ah, 2
int 10h
mov cx, 2000
mov bh, 0
mov bl, 07h
mov al, 32
mov ah, 9h
int 10h
ret

msg db 'Press Enter to load Kernel or press Esc to reboot!',0


TIMES 510 - ($ - $$) db 0
DW 0xAA55 ;end of bootloader (2 bytes)

Kernel.asm
;set print-registers
call clrscr

mov dl, 30
mov dh, 10
mov bh, 0
mov ah, 2
int 10h
MOV SI, os
CALL PrintString

mov dl, 30
mov dh, 12
mov bh, 0
mov ah, 2
int 10h
MOV SI, version
CALL PrintString

mov dl, 30
mov dh, 14
mov bh, 0
mov ah, 2
int 10h
MOV SI, dev
CALL PrintString

mov ah, 01h


mov cx, 2607h
int 10h

JMP $ ;hang

PrintString:
MOV AH, 0x0E ;function nr
MOV BH, 0x00 ;page
MOV BL, 0x07 ;color
.next_char:
MOV AL, [SI] ;current character
OR AL, AL
JZ .print_done ;if current char is zero, go to end
INT 0x10 ;print character
INC SI ;increase pointer to msg (next character)
JMP .next_char
.exit_char
RET
.print_done:
ret

clrscr:
mov dx, 0
mov bh, 0
mov ah, 2
int 10h
mov cx, 2000
mov bh, 0
mov bl, 07h
mov al, 32
mov ah, 9h
int 10h
ret

os db "OS: RSystem",0

version db "VERSION: 1.0",0

dev db "DEVELOPED BY: Glavan Ion",0

TIMES 512 - ($ - $$) db 0

Concluzie:
In aceasta lucrare de laborator mam invatat cum sa creez un kernel in assembler, sa-l scriu pe
disketa care va fi incarcat in memorie la tastarea unei taste.