zas segment stack 'stack' dw 64 dup(?) zas ends data segment vstup db 91 ;bude sa citat 80 znakov pocet db 0 ;tu sa ulozi ich skutocny pocet db 91 dup(?) ; miesto pre citany retazec retazec db 13,10,'Zadajte retazec: $' cislo db 13,10,'Pocet malych pismen: $' data ends code segment assume cs:code,ss:zas, ds:data ;----------------------------------------- pam MACRO t ; definovanie makra na vypis textu MOV AH, 9 ; presun 9 do registra AH, 9-systemova sluzba na vypis retazca mov DX, OFFSET t ; presun du reg. DX offsetovu cast t INT 21H ; prerusenie sluzba 21, vypis retazca endm ; koniec makra ;----------------------------------------- nacit proc mov ax,seg data mov ds,ax pam retazec 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 xor dx,dx endp nacit ;----------------------------------------- pocitanie proc xor bx,bx 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' inc bx ;pocita pocet malych pismen dalej:inc si ; priprav dalsi znak loop znova ; opakuj prehladavanie retazca xor cx,cx mov dx,bx xor bx,bx endp pocitanie ;----------------------------------------- prevod proc s10: cmp dx,10 ; je dx >= 10 ? jb s1 sub dx,10 ;bude v cykle odcitavat od dx 10 az dovtedy kym dx<10 inc cx ;v cl je zapisany pocet desiatok jmp s10 s1: mov bl,dl add bl,30h ;pripocitanim 30h k cislu ziskame jeho ASCII kod add cl,30h pam cislo mov ah,2 ;funkcia pre vypis retazca mov dl,cl int 21h ;vypis desiatky mov ah,2 mov dl,bl ;vypis jednotky int 21h mov ax,4c00h int 21h endp prevod ;----------------------------------------- start: call nacit call pocitanie call prevod code ends end start