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
mov al, 0
mov bh, 7
mov cx, 0
mov dh, 24
mov dl, 79
int 10h
ret

; Scroll full-screen
; Normal white on black
;
; Top-left
; Bottom-right

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.