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:
Vrlo je bitno da ima tacno jedan enter posle svih vremena, da bi radilo korektno.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
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