; Primjer rada s funkcijama operativnog sistema

; Zadatak: Datoteku A.TXT koja se nalazi na disku prikazati na ekranu

; Rjesenje: DOS funkcije se pozivaju s INT 21h. 
;  Broj funkcije je u AH registru.
;  Funkcija 3D u otvara datoteku. Ako je AL=0,
;  otvara je za citanje. DS:DX pokazuje na ime datoteke
;  Ukoliko je datoteka uspjesno otvorena u AX dobijemo
;  njen handle, broj koji je identificira, a ako nije
;  carry flag = 1.
;  Funkcija 3F cita sa datoteke ciji je hendl u BX 
;  blok duzine CX i smjesta ga na adresu DS:DX. U AX
;  vrati koliko je bajtova procitao.
;  Datoteka se zatvara funkcijom 3E, ciji je parametar hendl u BX.
;  Za prikaz na ekran koristicemo BIOS interrupt 10h, funkcija 0E,
;  AL=znak, BH=strana, BL=boja


	title   PRIMJER
	assume  cs:CSEG,ds:DSEG,ss:SSEG  ; Ova naredba kaze kompajleru da
					 ; podrazumijeva da CS pokazuje na CSEG, DS na
					 ; DSEG i SS na SSEG. Ovo se moze zaobici navodjenjem
					 ; imena segmenta u kodu.

SSEG  segment para stack 'STACK'
	db      64 dup ('Stack ')        ; Segment steka  
SSEG  ends

DSEG   segment para public 'DATA'        ; Segment za podatke 
IME    db 'a.txt',0                        
BUFFER db 0
HANDLE dw 0
DSEG   ends

CSEG   segment para public 'CODE'        ; Segment za program
GLAVNI   proc    far                     ; Ovdje se izvrsava nas program
	mov     ax,DSEG                  ; DS se postavi da pokazuje na podatke
	mov     ds,ax
	mov  ah,3Dh
	mov dx,offset IME
	mov al,0
	int 21h
	jc KRAJ
CITAJ:
	mov HANDLE,AX
	mov bx,HANDLE
	mov cx,1
	mov ah,3Fh
	mov dx,offset BUFFER
	int 21h
	cmp ax,0
	je ZATVORI
	mov ah,0Eh
	mov al,BUFFER
	mov bh,0
	mov bl,0
	int 10h
	jmp CITAJ
ZATVORI:
	mov bx,HANDLE
	mov ah,3Eh
	int 21h
KRAJ:
	mov ax,4c00h                     ; Ova funkcija znaci zavrsetak programa
	int 21h                          ; Kraj programa, poziva podprogram operativnog
					 ; sistema koji prazni nas program iz memorije
GLAVNI  endp
CSEG   ends

END   GLAVNI                             ; Parametar naredbe END je ime procedure na koju
					 ; program skace pri startu

