
; pouzitie procedury na casove oneskorenie, ktore sa da zvecsovat
; danym cislom v CX v dvoch vnorenych cykloch
; dava vacsie oneskorenie ako v jednom cykle

data	SEGMENT
mes1 	DB 'pred prestavkou$'
mes2 	DB '  po prestavke$'
data    ENDS

code	SEGMENT
	ASSUME CS:code,DS:data

Delay PROC NEAR
; procedura Delay vykona cakanie podla nastaveneho casu
; nema ziadny vstup
; nenici ziadny register
; neprodukuje ziadny vystup

     push cx		 ; uschovaj povodnu hodnotu cx
     mov   cx,0h         ; nastav cx pre loop
		 ; vonkajsia slucka
d:    push cx	         ; uschovaj hodnotu cx vonkajsej slucky
     mov cx,0ffh	 ; nastav cx pre vnutornu slucku
	         ; vnutorna slucka
de:  loop de
     pop cx		 ; obnov cx vonkajsej slucky
     loop  d	 
     pop cx		 ; obnov povodne cx
     ret		 ; koniec procedury
Delay ENDP

ProgramStart:
     mov dx,data	 ; adresu datoveho segmentu
     mov ds,dx		 ; nastav do registra DS

     mov ah,09
     mov dx,OFFSET mes1  ; vypis spravu
     int 21h             ; "pred prestavkou"
     call  Delay         ; vykonaj cakaciu slucku
     mov ah,09
     mov dx,OFFSET mes2  ; vypis spravu
     int 21h             ; "po prestavke"
     mov   ah,4ch	 ; ukoncenie programu
     int   21h		 ; a korektny navrat do DOS
code	ENDS
     END ProgramStart    ; spustenie programu od tejto adresy