Zadatak iz januara 2006.
Prva tacka:
Realizovati u asembleru procesora i8086 program koji 
čita iz fajla vreme kada je izvršeno merenje i izmereno vreme odziva,
a zatim računa rastojanje i upisuje u izlazni fajl, u vidu ASCII grafikona:

Rešenje:

Izgled Ulaz.txt fajla:
11:12:13:140-11:12:13:150
11:12:13:140-11:12:13:180
11:12:13:140-11:12:13:190
11:12:13:140-11:12:13:240
11:12:13:140-11:12:13:390
11:12:13:140-11:12:14:140
11:12:13:140-11:12:13:540
11:12:13:140-11:12:13:590
11:12:13:140-11:12:13:640
11:12:13:140-11:12:13:690
11:12:13:140-11:12:13:740
11:12:13:140-11:12:13:790
11:12:13:140-11:12:14:240
11:12:13:140-11:12:14:490
11:12:13:140-11:12:14:640
11:12:13:140-11:12:14:840
11:12:13:140-11:12:15:390
11:12:13:140-11:12:15:640
12:59:59:140-01:00:00:740

Vrlo je bitno da ima tacno jedan enter posle svih vremena, da bi radilo korektno.

Posle kompajliranja pokrećemo program sonar.exe i na izlazu imamo:
(Naravno samo crno belo. Crvena boja je ovde zbog preglednosti:)

D:\MASM>sonar
11:12:13:140-11:12:13:150  d=00007m
11:12:13:140-11:12:13:180  d=00030m
11:12:13:140-11:12:13:190  d=00038m
11:12:13:140-11:12:13:240  d=00076m
11:12:13:140-11:12:13:390  d=00191m
11:12:13:140-11:12:14:140  d=00766m
11:12:13:140-11:12:13:540  d=00306m
11:12:13:140-11:12:13:590  d=00344m
11:12:13:140-11:12:13:640  d=00383m
11:12:13:140-11:12:13:690  d=00421m
11:12:13:140-11:12:13:740  d=00459m
11:12:13:140-11:12:13:790  d=00498m
11:12:13:140-11:12:14:240  d=00843m
11:12:13:140-11:12:14:490  d=01034m
11:12:13:140-11:12:14:640  d=01149m
11:12:13:140-11:12:14:840  d=01303m
11:12:13:140-11:12:15:390  d=01724m
11:12:13:140-11:12:15:640  d=01916m
12:59:59:140-01:00:00:740  d=01226m

Izgled IZL.txt fajla posle pokretanja programa:

0m       200m      400m      600m      800m     1000m     1200m     1400m     1600m     1800m
0---------0---------0---------0---------0---------0---------0---------0---------0---------0   vreme merenja
*                                                                                             11:12:13
 *                                                                                            11:12:13
 *                                                                                            11:12:13
   *                                                                                          11:12:13
         *                                                                                    11:12:13
                                      *                                                       11:12:13
               *                                                                              11:12:13
                 *                                                                            11:12:13
                   *                                                                          11:12:13
                     *                                                                        11:12:13
                      *                                                                       11:12:13
                        *                                                                     11:12:13
                                          *                                                   11:12:13
                                                   *                                          11:12:13
                                                         *                                    11:12:13
                                                                 *                            11:12:13
                                                                                      *       11:12:13
                                                                                          *>  11:12:13
                                                             *                                12:59:59

Listing 13: sonar.asm

; program koji demonstrira citanje vremena koje je "sonar upisao" iz fajla Ulaz.txt
; ta vremena se obradjuju i prikazuju kao grafik u IZL.txt
; Bitno: mora da postoji tacno jedan enter po zavrsetku upisivanja vremena u Ulaz.txt
; i Ulaz.txt mora da postoji na D: drajvu pre pokretanja programa da ne bi prijavio gresku

.model large
.data

LF					EQU 0Ah
CR					EQU 0Dh

WriteMe   DB "0m       200m      400m      600m      800m     1000m     1200m     1400m     1600m     1800m",cr,lf
WriteMe1  DB "0---------0---------0---------0---------0---------0---------0---------0---------0---------0   vreme merenja",cr,lf
WriteMe2  DB "                       *                                                                      12:17:34",cr,lf
WriteMe3  DB "                                  *                                                           13:14:44",cr,lf
WriteG    DB "  ** GRESKA (sati)** ",0
WriteG1    DB "  ** GRESKA (minuti)** ",0
vece	DB ">"
prazno  DB " "
zvezda  DB "*"
dvtacke DB ":"
dje     DB "  d=$"
prent   DB cr,lf,"$"
metri   DB "m$"
prekid  DB cr,lf
prkraj  DB cr,lf,0
tocak1 db 0
tocak2 db 0
entom  db 0

Handle DW ? ; to store file handle 
FileNameU DB "D:\Ulaz.txt",0 ; file to be opened
FileNameI DB "D:\Izl.txt",0 ; file to write in
OpenError DB " **** Greska pri otvaranju fajla! PREKID PROGRAMA ****!$"
ReadError DB " **** Greska pri citanju fajla! PREKID PROGRAMA ****!$"
CreateError DB " **** Greska pri kreiranju fajla! PREKID PROGRAMA ****!$"
FormatError DB " **** Greska u formatu ulaznog fajla! PREKID PROGRAMA ****!$"
Jeste DB "j$"
Nije  DB "!$"
Enteric DB " ",cr,lf,"$"
Buffer DW 900 dup (?)		; bafer za smestanje podataka iz fajla ulaz.txt
RadniNiz    DW 27 dup (?)
br DW 0
brojb DW 0
brojvremena db 0

const27 db 27
c1000 dw 1000
c4 dw 4
c6 dw 6
c20 dw 20
const6 db 6
c200 dw 200
cw1533 dw 1533
cw40000 dw 40000
cw2000  dw 2000
cw10    dw 10

c30 db 30
c38 db 38
const10 dw 10

c3 db 3
c100  db 100
c10   db 10
c48   db 48
pomeraj dw 0
iteracija db 0
gr db 0			;GRESKA
IH DB 0			;POCETAK MERENJA SATI	
IM DB 0			;MINUTE
IS DB 0			;SEKUNDE
IT DW 0			;MILISEKUNDE

IIH DB 0		;KRAJ MERENJA SATI	
IIM DB 0		;MINUTE
IIS DB 0		;SEKUNDE
IIT DW 0		;MILISEKUNDE
nesto db 0
prenos DB 0
rezultat DB 0
rezultat1 db 0
pomocni DW 0
pom1	dw 0
pom2    db 0
pom3    db 0
pomO    db 5 dup (?)
.stack
.code 

mov ax,@data ; base address of data segment
mov ds,ax ; put this in ds



;===================================================================================
;                    otvaranje fajla Ulaz.txt
;===================================================================================
mov dx,OFFSET FileNameU		; put address of filename in dx 
mov al,2			; access mode - read and write
mov ah,3Dh			; function 3Dh -open a file
int 21h				; call DOS service

mov Handle,ax			; save file handle for later
jnc NoErrorO			; jump if carry flag set - error!
call KrajEO
NoErrorO:

;===================================================================================
;                citanje iz fajla Ulaz.txt (najvise 900 bajtova)
;===================================================================================
mov dx,offset Buffer		; address of buffer in dx
mov bx,Handle			; handle in bx
mov cx,900			; amount of bytes to be read
mov ah,3Fh			; function 3Fh - read from file
int 21h				; call dos service

jnc NoErrorR			; jump if carry flag no set - no error! 
call KrajER
NoErrorR:



;===================================================================================
;          broj bajtova koji smo procitali smestamo u promenljivu brojb
;===================================================================================
push ax
push dx
mov brojb,ax
pop dx
pop ax
;===================================================================================
;                    zatvaramo fajl Ulaz.txt
;===================================================================================
mov bx,Handle			; put file handle in bx 
mov ah,3Eh			; function 3Eh - close a file
int 21h				; call DOS service

;===================================================================================
;                kreiranje i otvaranje fajla IZL.txt
;===================================================================================
mov dx,offset FileNameI		; put offset of filename in dx 
xor cx,cx			; clear cx - make ordinary file
mov ah,3Ch			; function 3Ch - create a file
int 21h				; call DOS service
;===================================================================================
;                    da li je bilo greske pri kreiranju
;===================================================================================
jnc NoErrorC			; jump if there is an error
call KrajEC
NoErrorC:

mov dx,offset FileNameI		; put offset of filename in dx
mov al,2			; access mode -read and write
mov ah,3Dh			; function 3Dh - open the file
int 21h				; call dos service
;===================================================================================
;                  da li je bilo greske pri otvaranju fajla
;===================================================================================
jnc NoErrorOI			; jump if there is an error
call KrajEO
noErrorOI:
mov Handle,ax			; save value of handle 
;===================================================================================
;               cuvamo handle fajla IZL.txt u promenjljivoj Handle
;                     i upisujemo zaglavlje u izlazni fajl
;===================================================================================

mov dx,offset WriteMe	; address of information to write 
mov bx,Handle		; file handle for file
mov cx,95		; 95 bytes to be written
mov ah,40h		; function 40h - write to file
int 21h			; call dos service

mov dx,offset WriteMe1	; address of information to write 
mov bx,Handle		; file handle for file
mov cx,109		; 109 bytes to be written
mov ah,40h		; function 40h - write to file
int 21h			; call dos service

;===================================================================================
;               odredjujemo broj petlji (broj vremena u Ulaz.txt)
;        i proveravamo opsti format ulaznog fajla, da li ima n*27 bajtova
;===================================================================================
mov ax,brojb
div const27
mov brojvremena,al
cmp ah,0
je Nista
add brojvremena,1;		
cmp ah,25
je Nista
call KrajEF
Nista:
mov bx,0
mov pomeraj,0
;===================================================================================
;      ovde pocinje petlja za obradu podataka koje smo procitali iz Ulaz.txt
;                          a smestili smo u Buffer
;===================================================================================

NoviKrug:
cmp iteracija,0
je josNKP
add pomeraj,27			
mov bx,0

JosNKP:

add bx,pomeraj
mov al,Buffer[bx]
sub bx,pomeraj
mov RadniNiz[bx],al
add bx,1

cmp bx,27
jne JosNKP
mov bx,0
;===================================================================================
;   proveravamo da li je zadovoljen format, cifre, dvotacke, crtica, enter
;               ako nesto nije korektno prekida se rad programa
;===================================================================================
call Provera		
;===================================================================================
;      dodeljujemo  promenljivim njihove vrednosti (sati, min, sek, msek)
;===================================================================================
call DodPromen
;===================================================================================
;                  vrsimo obradu tako dobijenih podataka
;                          trazimo proteklo vreme
;===================================================================================
call Obrada

jmp Preskok
NoviKrug1:
jmp NoviKrug
Preskok:
;===================================================================================
;             da li je bilo greske izracunavanju (greska formata podataka)
;                                    za sate
;===================================================================================
	cmp IIH,0
	je UreduSati
	call KRAJ_GRESKA
;===================================================================================
;             da li je bilo greske izracunavanju (greska formata podataka)
;                                    za minute
;===================================================================================
UreduSati:
	cmp IIM,0
	je Uredu
	call KRAJ_GRESKA1
;===================================================================================
;    ako je sve u redu izracunamo mesto gde ce se smestici zvezdica u grafiku
;===================================================================================

Uredu:
	mov rezultat,0
	mov al,IIS
	xor ah,ah
	mul c1000

	add ax,IIT
	xor dx,dx
	mul cw1533
	div cw40000
	mov rezultat,ax



;===================================================================================
;                        upis u fajl IZL.txt
;===================================================================================
call UpisUFajl
;===================================================================================
;                      idemo dalje za sledece vreme
;===================================================================================
;===================================================================================
;                          ispis na ekran 
;===================================================================================

mov cx,25			; length of string
mov si,OFFSET RAdniNiz		; DS:SI - address of string
xor bh,bh			; video page - 0
mov ah,0Eh			; function 0Eh - write character

NextChar:

lodsb				; AL = next character in string
int 10h				; call BIOS service
loop NextChar  

call ZA_EKRAN


add iteracija,1
mov al,brojvremena
cmp iteracija,al
jne NoviKrug1

;===================================================================================
;                  zatvaranje fajla IZL.txt
;===================================================================================
mov bx,Handle		; put file handle in bx 
mov ah,3Eh		; function 3Eh - close a file
int 21h			; call dos service





;===================================================================================
;                           kraj programa
;===================================================================================
Kraj:
mov ax,4C00h			; terminate program 
int 21h	
;===================================================================================
;                               UpisUFajl
;  smestamo zvezdicu na njeno mesto u fajlu, a to je kolona koja je 
;  sadrzana u rezultatu  na ostale kolone u fajlu IZL.txt se smesta "space"
;  a pocev od 95 kolone smesta se pocetno vreme
;===================================================================================
UpisUFajl  PROC NEAR
push ax
push bx
push cx
push dx

;==========================================
;proveravamo da li je vece od max
;dozvoljenog reda  (91) ako jeste skacemo
; na "veceodmax"
;==========================================
push ax
mov al,rezultat
mov tocak1,al
pop ax
cmp tocak1,0
je nemanista
cmp tocak1,91
ja veceodmax
;==========================================
;smestamo spaceove rezultat puta 
;==========================================
jos:
mov dx,offset prazno			 ; address of information to write 
mov bx,Handle				; file handle for file
mov cx,1				; 47 bytes to be written
mov ah,40h				; function 40h - write to file
int 21h					; call dos service
dec tocak1
cmp tocak1,0
jne jos
;==========================================
;smestamo zvezdu
;==========================================
nemanista:
mov dx,offset zvezda		; address of information to write 
mov bx,Handle			; file handle for file
mov cx,1			; 47 bytes to be written
mov ah,40h			; function 40h - write to file
int 21h				; call dos service
;==========================================
;smestamo spaceove 93-rezultat puta
;==========================================
push ax
mov al,rezultat
mov tocak2,93
sub tocak2,al
pop ax
jos1:
mov dx,offset prazno			 ; address of information to write 
mov bx,Handle				; file handle for file
mov cx,1				; 47 bytes to be written
mov ah,40h				; function 40h - write to file
int 21h					; call dos service
dec tocak2
cmp tocak2,0
jne jos1
;==========================================
;smestamo pocetno vreme 
;==========================================
mov dx,offset RadniNiz		; address of information to write 
mov bx,Handle			; file handle for file
mov cx,8			; 47 bytes to be written
mov ah,40h			; function 40h - write to file
int 21h				; call dos service
;==========================================
;smestamo 0 na kraju reda koji smo upisali
;==========================================
mov dx,offset prkraj		; address of information to write 
mov bx,Handle			; file handle for file
mov cx,2			; 47 bytes to be written
mov ah,40h			; function 40h - write to file
int 21h				; call dos service
jmp zavrsi

veceodmax:
;==========================================
;smestamo prazno sve do kraja
;==========================================
mov tocak2,90
jos2:
mov dx,offset prazno			 ; address of information to write 
mov bx,Handle				; file handle for file
mov cx,1				; 47 bytes to be written
mov ah,40h				; function 40h - write to file
int 21h					; call dos service
dec tocak2
cmp tocak2,0
jne jos2
;==========================================
;smestamo zvezdu
;==========================================
mov dx,offset zvezda		; address of information to write 
mov bx,Handle			; file handle for file
mov cx,1			; 47 bytes to be written
mov ah,40h			; function 40h - write to file
int 21h				; call dos service
;==========================================
;smestamo znak za vece
;==========================================
mov dx,offset vece		; address of information to write 
mov bx,Handle			; file handle for file
mov cx,1			; 47 bytes to be written
mov ah,40h			; function 40h - write to file
int 21h				; call dos service

mov dx,offset prazno			 ; address of information to write 
mov bx,Handle				; file handle for file
mov cx,1				; 47 bytes to be written
mov ah,40h				; function 40h - write to file
int 21h					; call dos service
mov dx,offset prazno			 ; address of information to write 
mov bx,Handle				; file handle for file
mov cx,1				; 47 bytes to be written
mov ah,40h				; function 40h - write to file
int 21h					; call dos service
;==========================================
;smestamo pocetno vreme 
;==========================================
mov dx,offset RadniNiz		; address of information to write 
mov bx,Handle			; file handle for file
mov cx,8			; 47 bytes to be written
mov ah,40h			; function 40h - write to file
int 21h				; call dos service
;==========================================
;smestamo 0 na kraju reda koji smo upisali
;==========================================
mov dx,offset prkraj		; address of information to write 
mov bx,Handle			; file handle for file
mov cx,2			; 47 bytes to be written
mov ah,40h			; function 40h - write to file
int 21h				; call dos service

zavrsi:
pop dx
pop cx
pop bx
pop ax
ret
UpisUFajl ENDP
;===================================================================================
;===================================================================================
;                             Obrada
; oduzimanje sati, minuta, sek, msek sa prenosom rezultat u IIH,IIM,IIS,IIT
;===================================================================================
Obrada  PROC NEAR
push ax
push bx
push cx
push dx

;==========================================
;oduzimanje milisekundi(IIT=IIT-IT) 
;==========================================
;dalje1:
mov prenos,0
mov ax,IT
cmp IIT,ax		;da li je IIT manje od IT
jb DAmanjije
jmp Skok1

DAmanjije:
mov prenos,1
mov ax,IIT
add ax,c1000
mov IIT,ax

Skok1:
mov ax,IT
sub IIT,ax	;rezultat za sekunde IIT

;==========================================
;oduzimanje sekundi sa prenosom (IIS=IIS-IS) 
;==========================================
cmp prenos,1
je Jeste1
mov al,IS
cmp IIS,al
jb Jestemanje
mov prenos,0
jmp Oduzimanje

Jestemanje:
add IIS,60
mov prenos,1
jmp Oduzimanje

Jeste1:
mov al,IS
cmp IIS,al
ja Jestevece
add IIS,59
mov prenos,1
jmp Oduzimanje

Jestevece:
sub IIS,1
mov prenos,0
jmp Oduzimanje

Oduzimanje:
mov al,IS
sub IIS,al	;rezultat za sekunde IIS
;==========================================
;oduzimanje minuti sa prenosom (IIM=IIM-IM) 
;==========================================
cmp prenos,1
je Jeste2
mov al,IM
cmp IIM,al
jb Jestemanjem
mov prenos,0
jmp OduzimanjeM

Jestemanjem:
add IIM,60
mov prenos,1
jmp OduzimanjeM

Jeste2:
mov al,IM
cmp IIM,al
ja Jestevecem
add IIM,59
mov prenos,1
jmp OduzimanjeM

Jestevecem:
sub IIM,1
mov prenos,0
jmp OduzimanjeM

OduzimanjeM:
mov al,IM
sub IIM,al	;rezultat za sekunde IIM
;==========================================
;oduzimanje sati sa prenosom (IIH=IIH-IH) 
;==========================================
cmp prenos,1
je Jeste3
mov al,IH
cmp IIH,al
jb Jestemanjeh
mov prenos,0
jmp OduzimanjeH

Jestemanjeh:
add IIH,12
mov prenos,1
jmp OduzimanjeH

Jeste3:
mov al,IH
cmp IIH,al
ja Jesteveceh
add IIH,11
mov prenos,1
jmp OduzimanjeH

Jesteveceh:
sub IIH,1
mov prenos,0
jmp OduzimanjeH

OduzimanjeH:
mov al,IH
sub IIH,al	;rezultat za sate u IIH


pop dx
pop cx
pop bx
pop ax
ret
Obrada ENDP
;===================================================================================
;===================================================================================
;                          DodPromen
; dodeljujemo promenljive(sate, minute, sek, msek) vrednosti iz RadnogNiza
; RadniNiz[0]i[1] su sati za pocetno vreme i tako dalje
; RadniNiz[13]i[14] su sati za krajnje vreme i tako dalje
;===================================================================================
DodPromen  PROC NEAR
push ax
push bx
push cx
push dx
;==========================================
;pocetno vreme sati IH
;==========================================
mov bx,0
mov al,RadniNiz[bx]
sub al,48
mul c10
mov IH,al
mov bx,1
mov al,RadniNiz[bx]
sub al,48
add IH,al
;==========================================
;pocetno vreme minuti IM
;==========================================
mov bx,3
mov al,RadniNiz[bx]
sub al,48
mul c10
mov IM,al
mov bx,4
mov al,RadniNiz[bx]
sub al,48
add IM,al
;==========================================
;pocetno vreme sekunde IS
;==========================================
mov bx,6
mov al,RadniNiz[bx]
sub al,48
mul c10
mov IS,al
mov bx,7
mov al,RadniNiz[bx]
sub al,48
add IS,al
;==========================================
;pocetno vreme milisekunde IT
;==========================================
mov bx,9
mov al,RadniNiz[bx]
sub al,48
mul c100
mov IT,ax
mov bx,10
mov al,RadniNiz[bx]
sub al,48
mul c10
xor ah,ah
add IT,ax
mov bx,11
mov al,RadniNiz[bx]
sub al,48
xor ah,ah
add IT,ax


;@@_______drugo_vreme

;==========================================
;krajnje vreme sati IIH
;==========================================
mov bx,13
mov al,RadniNiz[bx]
sub al,48
mul c10
mov IIH,al
mov bx,14
mov al,RadniNiz[bx]
sub al,48
add IIH,al
;==========================================
;krajnje vreme minuti IIM
;==========================================
mov bx,16
mov al,RadniNiz[bx]
sub al,48
mul c10
mov IIM,al
mov bx,17
mov al,RadniNiz[bx]
sub al,48
add IIM,al
;==========================================
;krajnje vreme sekunde IIS
;==========================================
mov bx,19
mov al,RadniNiz[bx]
sub al,48
mul c10
mov IIS,al
mov bx,20
mov al,RadniNiz[bx]
sub al,48
add IIS,al
;==========================================
;krajnje vreme milisekunde IIT
;==========================================
mov bx,22
mov al,RadniNiz[bx]
sub al,48
xor ah,ah
mul c100
mov IIT,ax
mov bx,23
mov al,RadniNiz[bx]
sub al,48
mul c10
xor ah,ah
add IIT,ax
mov bx,24
mov al,RadniNiz[bx]
sub al,48
xor ah,ah
add IIT,ax



pop dx
pop cx
pop bx
pop ax
ret
DodPromen ENDP
;===================================================================================
;===================================================================================
;                                Provera
;    proveravamo da li su podaci ono sto bi trebalo da zadovolje u formatu:
; "xx:xx:xx:xxx-xx:xx:xx:xxx'cr'lf'"  x predstavlja cifru 'cr'lf' predstavlja enter
;===================================================================================

Provera PROC NEAR
push ax
push bx
push cx
push dx

mov gr,0
	mov bx,0
	mov al, RadniNiz[bx]
	call Cifra		;cifra
	cmp al,50		;ako je prva cifra sati veca od 1: greska
	jb dalje11
	call KrajEF

dalje11:
	cmp al,48		;ako je prva cifra sati 0, druga moze da bude bilo koja
	je dalje1
	mov bx,1		
	mov al, RadniNiz[bx]
	call Cifra		;cifra
	cmp al,51		;ako je 1 onda druga mora da bude manja od 3  ili greska
	jb dalje12
	call KrajEF



dalje1:
	mov bx,1
	mov al, RadniNiz[bx]
	call Cifra		;cifra
dalje12:
	mov bx,2
	mov al, RadniNiz[bx]
	call Dvotacka		;dvotacka
	mov bx,3
	mov al, RadniNiz[bx]
	call Cifra		;cifra
	cmp al,54		; prva cifra minuta kao i sekundi manje od 6
	jb dalje2
	call KrajEF

dalje2:
	mov bx,4
	mov al, RadniNiz[bx]
	call Cifra		;cifra
	mov bx,5
	mov al, RadniNiz[bx]
	call Dvotacka		;dvotacka
	mov bx,6
	mov al, RadniNiz[bx]
	call Cifra		;cifra
	cmp al,54		; prva cifra minuta kao i sekundi manje od 6
	jb dalje3
	call KrajEF

dalje3:
	mov bx,7
	mov al, RadniNiz[bx]
	call Cifra		;cifra
	mov bx,8
	mov al, RadniNiz[bx]
	call Dvotacka		;dvotacka
	mov bx,9
	mov al, RadniNiz[bx]
	call Cifra		;cifra
	mov bx,10
	mov al, RadniNiz[bx]
	call Cifra		;cifra
	mov bx,11
	mov al, RadniNiz[bx]
	call Cifra		;cifra
	mov bx,12
	mov al, RadniNiz[bx]
	call Crtica		;crtica


	mov bx,13
	mov al, RadniNiz[bx]
	call Cifra		;cifra
	cmp al,50		;ako je prva cifra sati veca od 1: greska
	jb dalje16
	call KrajEF

dalje16:
	cmp al,48		;ako je prva cifra sati 0, druga moze da bude bilo koja
	je dalje6
	mov bx,14		
	mov al, RadniNiz[bx]
	call Cifra		;cifra
	cmp al,51		;ako je 1 onda druga mora da bude manja od 3  ili greska
	jb dalje17
	call KrajEF

dalje6:
	mov bx,14
	mov al, RadniNiz[bx]
	call Cifra		;cifra
dalje17:
	mov bx,15
	mov al, RadniNiz[bx]
	call Dvotacka		;dvotacka
	mov bx,16
	mov al, RadniNiz[bx]
	call Cifra		;cifra
	cmp al,54		; prva cifra minuta kao i sekundi manje od 6
	jb dalje4
	call KrajEF

dalje4:
	mov bx,17
	mov al, RadniNiz[bx]
	call Cifra		;cifra
	mov bx,18
	mov al, RadniNiz[bx]
	call Dvotacka		;dvotacka
	mov bx,19
	mov al, RadniNiz[bx]
	call Cifra		;cifra
	cmp al,54		; prva cifra minuta kao i sekundi manje od 6
	jb dalje5
	call KrajEF

dalje5:
	mov bx,20
	mov al, RadniNiz[bx]
	call Cifra		;cifra
	mov bx,21
	mov al, RadniNiz[bx]
	call Dvotacka		;dvotacka
	mov bx,22
	mov al, RadniNiz[bx]
	call Cifra		;cifra
	mov bx,23
	mov al, RadniNiz[bx]
	call Cifra		;cifra
	mov bx,24
	mov al, RadniNiz[bx]
	call Cifra		;cifra
	mov bx,25
	mov al, RadniNiz[bx]
	call CCR
	mov bx,26
	mov al, RadniNiz[bx]
	call LLF

cmp gr,1
jne Dalje
Greska:
call KrajEF
Dalje:


pop dx
pop cx
pop bx
pop ax
ret
Provera ENDP
;===================================================================================
;===================================================================================
;    Cifra   proveravamo da li je na trazenom mestu cifra "0,1,2,3,4,5,6,7,8,9"
;===================================================================================

Cifra PROC NEAR
push ax
push bx
push cx
push dx

cmp al,'0'
je Cifrica
cmp al,'1'
je Cifrica
cmp al,'2'
je Cifrica
cmp al,'3'
je Cifrica
cmp al,'4'
je Cifrica
cmp al,'5'
je Cifrica
cmp al,'6'
je Cifrica
cmp al,'7'
je Cifrica
cmp al,'8'
je Cifrica
cmp al,'9'
je Cifrica
call KrajEF

Cifrica:

pop dx
pop cx
pop bx
pop ax
ret
Cifra ENDP
;===================================================================================
;===================================================================================
;      Dvotacka    proveravamo da li je na trazenom mestu dvotacka ":"
;===================================================================================

Dvotacka PROC NEAR
push ax
push bx
push cx
push dx

cmp al,':'
je Dvotackica
call KrajEF
Dvotackica:	

pop dx
pop cx
pop bx
pop ax
ret
Dvotacka ENDP
;===================================================================================
;===================================================================================
;       Crtica  proveravamo da li je na trazenom mestu crtica "-"
;===================================================================================

Crtica PROC NEAR
push ax
push bx
push cx
push dx

cmp al,'-'
je Crticica
call KrajEF
Crticica:	

pop dx
pop cx
pop bx
pop ax
ret
Crtica ENDP
;===================================================================================
;===================================================================================
;       CCR    utvrdjujemo da li ja na26 mestu u nizu CR
;===================================================================================

CCR PROC NEAR
push ax
push bx
push cx
push dx

cmp al,CR
je JesteCR
call KrajEF
JesteCR:	

pop dx
pop cx
pop bx
pop ax
ret
CCR ENDP
;===================================================================================
;===================================================================================
;      LLF    utvrdjujemo da li ja na26 mestu u nizu LF
;===================================================================================

LLF PROC NEAR
push ax
push bx
push cx
push dx

cmp al,LF
je JesteLF
call KrajEF
JesteLF:	

pop dx
pop cx
pop bx
pop ax
ret
LLF ENDP
;===================================================================================
;===================================================================================
;          KRAJEO   greska pri otvaranju fajla i kraj programa
;===================================================================================
KrajEO PROC NEAR
push ax
push bx
push cx
push dx

mov dx,offset OpenError		; display an error 
mov ah,09h			; using function 09h
int 21h				; call DOS service
mov ax,4C01h			; end program with an errorlevel =1 
int 21h 

pop dx
pop cx
pop bx
pop ax
ret
KrajEO ENDP
;===================================================================================
;===================================================================================
;          KrajER    greska pri citanju fajla i kraj programa
;===================================================================================
KrajER  PROC NEAR
push ax
push bx
push cx
push dx

mov dx,offset ReadError		; display an error 
mov ah,09h			; using function 09h
int 21h				; call DOS service
mov ax,4C02h			; end program with an errorlevel =2 
int 21h


pop dx
pop cx
pop bx
pop ax
ret
KrajER ENDP
;===================================================================================
;===================================================================================
;          KrajEC   greska pri kreiranju fajla i kraj programa
;===================================================================================
KrajEC  PROC NEAR
push ax
push bx
push cx
push dx

mov dx,offset CreateError	; display an error 
mov ah,09h			;using function 09h
int 21h				; call DOS service
mov ax,4C02h			; end program with an errorlevel =2 
int 21h


pop dx
pop cx
pop bx
pop ax
ret
KrajEC ENDP
;===================================================================================
;===================================================================================
;         KrajEF  greska u formatu fajla i kraj programa
;===================================================================================
KrajEF  PROC NEAR
push ax
push bx
push cx
push dx

mov dx,offset FormatError	; display an error 
mov ah,09h			; using function 09h
int 21h				; call DOS service
mov ax,4C02h			; end program with an errorlevel =2 
int 21h


pop dx
pop cx
pop bx
pop ax
ret
KrajEF ENDP
;:::::::::::::::::::::::::::::::::::::::::::::::::::::
;===================================================================================
;    KRAJICAK  Opsti kraj
;===================================================================================
KRAJICAK  PROC NEAR
push ax
push bx
push cx
push dx


mov ax,4C00h  
int 21h


pop dx
pop cx
pop bx
pop ax
ret
KRAJICAK ENDP
;:::::::::::::::::::::::::::::::::::::::::::::::::::::

;===================================================================================
;     KRAJ_GRESKA    greska zbog sati > 0 i kraj programa
;===================================================================================
KRAJ_GRESKA  PROC NEAR
push ax
push bx
push cx
push dx

mov dx,offset FormatError	; display an error 
mov ah,09h			; using function 09h
int 21h				; call DOS service
mov ax,4C02h			; end program with an errorlevel =2 
int 21h

mov dx,offset WriteG		; address of information to write 
mov bx,Handle			; file handle for file
mov cx,21			; 47 bytes to be written
mov ah,40h			; function 40h - write to file
int 21h				; call dos service

mov bx,Handle		; put file handle in bx 
mov ah,3Eh		; function 3Eh - close a file
int 21h			; call dos service

mov ax,4C00h  
int 21h


pop dx
pop cx
pop bx
pop ax
ret
KRAJ_GRESKA ENDP
;===================================================================================
;===================================================================================
;       KRAJ_GRESKA1   greska zbog minuti > 0 i kraj programa
;===================================================================================
KRAJ_GRESKA1  PROC NEAR
push ax
push bx
push cx
push dx

mov dx,offset FormatError	; display an error 
mov ah,09h			; using function 09h
int 21h				; call DOS service
mov ax,4C02h			; end program with an errorlevel =2 
int 21h

mov dx,offset WriteG1		; address of information to write 
mov bx,Handle			; file handle for file
mov cx,24			; 47 bytes to be written
mov ah,40h			; function 40h - write to file
int 21h				; call dos service

mov bx,Handle		; put file handle in bx 
mov ah,3Eh		; function 3Eh - close a file
int 21h			; call dos service

mov ax,4C00h  
int 21h


pop dx
pop cx
pop bx
pop ax
ret
KRAJ_GRESKA1 ENDP
;===================================================================================
;===================================================================================
;       ZA_EKRAN   za ispis razdaljine na ekran
;===================================================================================
ZA_EKRAN  PROC NEAR
push ax
push bx
push cx
push dx

	mov rezultat1,0
	mov al,IIS
	xor ah,ah
	mul c1000

	add ax,IIT
	xor dx,dx
	mul cw1533
	div cw2000
	mov rezultat1,ax

mov dx,OFFSET dje 		;prikaz teksta na ekranu
mov ah,09			;+	
int 21h				;+

mov ax,rezultat1
mov bx,4
xor dx,dx
div cw10
mov pomo[bx],dl
sub bx,1
xor dx,dx
div cw10
mov pomo[bx],dl
sub bx,1
xor dx,dx
div cw10
mov pomo[bx],dl
sub bx,1
xor dx,dx
div cw10
mov pomo[bx],dl
sub bx,1
mov pomo[bx],al

	mov bx,0
	mov al,pomO[bx]
	add al,48
	xor dx,dx
	mov dl,al 
	mov ah,02h 
	int 21h 

	mov bx,1
	mov al,pomO[bx]
	add al,48
	xor dx,dx
	mov dl,al 
	mov ah,02h 
	int 21h 

	mov bx,2
	mov al,pomO[bx]
	add al,48
	xor dx,dx
	mov dl,al 
	mov ah,02h 
	int 21h 

	mov bx,3
	mov al,pomO[bx]
	add al,48
	xor dx,dx
	mov dl,al 
	mov ah,02h 
	int 21h 

	mov bx,4
	mov al,pomO[bx]
	add al,48
	xor dx,dx
	mov dl,al 
	mov ah,02h 
	int 21h 

mov dx,OFFSET metri 		;prikaz teksta na ekranu
mov ah,09			;+	
int 21h				;+

mov dx,OFFSET prent 		;prikaz teksta na ekranu
mov ah,09			;+	
int 21h				;+



pop dx
pop cx
pop bx
pop ax
ret
ZA_EKRAN  ENDP
;===================================================================================
END

Sadrzaj