


ZAS	SEGMENT STACK			;zaciatok zasobnika

	DW	100H DUP(?)
ZAS	ENDS



DATA	SEGMENT				;zaciatok datoveho segmentu
TEXT1	DB	10,13, 'Zadaj Znak  $'	;definicia retazca
TEXT2	DB	13,10, 'Znak, ktory si zadal:  $'	;definicia retazca
ENTR	DB	13			;definicia retazca
DATA	ENDS	


CODE	SEGMENT				;zaciatok kodoveho segmentu
	ASSUME CS:CODE, DS:DATA,	;direktiva oznamuje



vypis	MACRO t				;makro na vypis textu
	mov ah, 09h			;do ah -> cislo obsluhy na vypisanie retazca
	mov dx, offset t		;do DX vloz posunutie retazca v datovom segmente,
	int 21h				;prerusenie na vykonanie ukoncenia programu
	endm				;koniec makra

START:	mov AX, SEG DATA		;do AX vloz adresu segmentu DATA
	mov DS, AX			;segmentovu adresu presun do DS
	
s:	vypis text1
 
	mov ah, 1h
	int 21h				;prerusenie na vykonanie ukoncenia programu
	cmp al, ENTR			;porovnanie obsahu premennej al s ENTR
	jz koniec			;ak sa cisla rovnaju - vykona sa - podmieneny skok

	push ax				;dekrementuje register o 2 a ulozi do ax na na wrch zasobnika

	vypis text2
	POP ax				;dekrementuje a ulozi na vrch registra - opak push

	mov dl, al			;uloz nacitany znak do registra dl
	mov ah, 2			;ziadost o vystup znaku na obrazovku sluzbou cislo 2
	INT 21h				;uskutocnenie vystupu na obrazovku
	
	jmp S				;citaj dalsi znak z klavesnice

koniec:
	mov ah, 4CH			;funkcia ukoncenia programu
	int 21h				;prerusenie na vykonanie ukoncenia programu


CODE	ENDS				; koniec kodoweho segmentu
	END 	START			;program bude spusteny od nawestia START
