.model small

data segment	
riadok  struc
	r	dw 10 dup(?)               ;definicia riadku
riadok  ends
	tab	riadok 4 dup(<>)           ;definicia tabulky (4 riadky)
	zakl	dw 2,8,10,12               ;zaklady 
	hodnota db 6 dup (' '),'$'         ;sem prevedie vysledok ako text
	message db 13,10,'þ Zadaj polohu polozky (v tabulke 4x5 mocnin cisiel 2,8,10,12 ): $'
	riad	db 13,10,'þ Zadaj riadok tabulky: $'
	stlp	db 13,10,'þ Zadaj stlpec tabulky: $'
	vysl	db 13,10,'þ Hodnota = $'
	text_tab db 13,10,13,10,13,10,'Stlac lubovolnu klavesu...$'
data ends

code segment 	
                assume cs:code,ds:data
prevod  proc
		mov di,offset hodnota+5    ;cislice zapisujem odzadu
@loop:  	mov bx,10			;navestie			
		div bx
		add dl,'0'			;pripoc. nul. -znak
		mov [di],dl
		dec di
		xor dx,dx
		cmp ax,0
		jnz  @loop                  ;v DI zostane offset na hodnotu
		ret
prevod  endp
create  proc                        ;vytvori celu tabulku mocnin
		xor dx,dx
		xor si,si           ;ukazuje na zaciatok riadku
		xor bx,bx           ;pozicia vo vektore zakladov
x:      	xor di,di           ;pozicia v riadku
		mov cx,5
		mov ax,1
		add di,si
y:      	mul zakl[bx]
		mov tab.r[di],dx    ;32 bitove cislo zapise do tabulky
		mov tab.r[di+2],ax  ;dx=hornych 16,ax=dolnych 16 
		add di,4
		loop y
		add si,20          ;posun na dalsi riadok
		add bx,2
		cmp bx,8
		jb x
		ret
create  endp
vyber   proc                            ;vyber konkretneho prvku
		mov ah,09h
		mov dx,offset message
		int 21h
@ria:   	mov ah,09h
		mov dx,offset riad
		int 21h
		mov ah,01h
		int 21h
		cmp al,'1'
		jl @ria
		cmp al,'4'
		jg @ria
		sub al,'1'              ;prevod znaku na cislo(al=pozicia v tab.) 
		mov ah,0
		mov bx,20
		mul bx                  ;vypocet riadku (1 riadok=20 bytov)
		mov si,ax               ;si <- poziciu zaciatku riadku
@stl:   	mov ah,09h
		mov dx,offset stlp
		int 21h
		mov ah,01h
		int 21h
		cmp al,'1'
		jl @stl
		cmp al,'5'
		jg @stl
		sub al,'1'
		mov ah,0
		mov bx,4
		mul bx
		mov di,ax           ;di <- poziciu v riadku
		add si,di           ;si <- si + di
		mov dx,tab.r[si]
		mov ax,tab.r[si+2]
		call prevod
		mov dx,offset vysl
		mov ah,09h
		int 21h
		mov dx,di
		mov ah,09h
		int 21h
		ret
vyber   endp

start:			
		mov ax,seg data
		mov ds,ax
		call create
		call vyber
		mov ah,09h
		lea dx,text_tab           ;to iste ak mov dx,offset bla...
		int 21h
		mov ah,07h                ;caka na stlacenie klavesy
		int 21h
		mov ax,4c00h
		int 21h
code ends
end start
