;konverzia male-velke
;z nacitaneho retazca zmeni male pismena na velke a vypise iba velke pismena

zas      segment stack 'stack'
         dw 64 dup(?)
zas      ends

data       segment
vstup      db 80       ;bude sa citat 80 znakov
pocet      db 0        ;tu sa ulozi ich skutocny pocet
           db 80 dup(?)  ; miesto pre citany retazec
nr         db 0dh, 0ah
vystup     db 83 dup(?); miesto pre vysledok+13,10,$
data         ends

code      segment
       assume cs:code,ss:zas, ds:data
start:
      mov ax,seg data
      mov ds,ax
      mov ah,0ah   ;sluzba pre vstup retazca z klavesnice
      mov dx,offset vstup
      int 21h
      xor ax,ax     ; nulovanie ax
      xor cx,cx     ; nulovanie pocitadla
      mov cl,pocet  ; pocet znakov do cl	      
      add dx,2      ; nastav sa na citanie prveho znaku
      mov si,dx     ; adresa prveho znaku v si
      mov bx, offset vystup  ; priprav adresu pre vystupny retazec
znova:mov al, [si]  ; uloz znak do al ;   
      cmp al, 60h   ; je to male pismeno a?  'a' = 61h
      jbe dalej     ; znak nebude male pismeno,v ascii tabulke je pod znakom 'a'
      cmp al, 7bh   ; je to male pismeno z?
      jnb dalej     ; znak nebude male pismeno, v ascii tabulke je nad znakom 'z'
      sub al, 20h   ; je to male pismeno, "vyrob" velke
      mov [bx], al  ; uloz velke pismeno na vystup
      inc bx	    ; priprav dalsiu adresu pre vystup velkeho pismena		
dalej:inc si        ; priprav dalsi znak
      loop znova    ; opakuj prehladavanie retazca     
      mov byte ptr[bx], 13
      mov byte ptr[bx]+1, 10
      mov byte ptr[bx]+2, '$'
      mov ah,9
      mov dx, offset nr        ; este jeden riadok
      int 21h
      mov ax,4c00h
      int 21h
code  ends
      end start