Kód:
.MODEL SMALL
.STACK 50H
.data
zadaj DB 13,10,'Zadaj retazec a stlac ENTER: $'
vysledok DB 13,10,'Cislice z retazca <0....9>: $'
priemer DB 13,10,'Aritm.priemer: $'
dlzka DB 0FFh
text DB '' ; tu sa bude ukladat "zadavany retazec"
.CODE
org 100h
START:
mov ax,@data
MOV DS,AX
mov ah,09h
lea dx,zadaj
int 21h ; zobrazi sa vyzva na zadanie retazca
lea dx, dlzka ;nastavi do dx adresu ulozenej max dlzky retazca
;zaroven od tej adresy bude ukladat nacitany retazec
mov ah,0Ah ;sluzba na nacitanie retazca ukonceneho ENTER
int 21h
lea bx, text ; do bx adresu data seg.
xor CX, CX ; CX <--- 0
mov CL, [bx] ; CL ... dlzka nacitaneho textu
MOV DI, CX
mov [text+DI+1], '$' ; na koniec nacitaneho retazca prida '$'
lea dx,vysledok
mov ah,09h
int 21h ; zobrazi text "Cislice:..."
XOR BX,BX ; BX <- 0; ...sucet cislic
XOR CH,CH ; CH <- 0; ...pocet cislic
lea DI, text
cely_retazec:
mov AL, [DI]
cmp AL, '$' ; sme uz na konci prehladavaneho retazca
je koniec_retazca
cmp AL, '0' ; porovna znak s cislicou '0'
jl nie_cislica ; ... menej nez '0'
cmp AL, '9' ; porovna znak s cislicou '9'
jg nie_cislica ; ... viac nez '9'
cislica:
mov DL, AL ; ... cislica !!! :-)
mov ah,02h ;
int 21h ;vypisanie znaku (cislice)
aritmetika:
inc CH ; Pocet cislic +1
sub AL,'0' ; ... z cislice urobime cislo ('0'...0; ---- '9'...9)
mov AH, 0
add BX,AX ; sucet + hodnota_cislice
nie_cislica:
inc DI ; dalsi znak v zdrojovom retazci
jmp cely_retazec
koniec_retazca:
lea dx,priemer
mov ah,09h
int 21h ; zobrazi text "Aritm.priemer:"
mov AX,BX ; pre delenie musi byt delenec register AX !!!
div CH ; AX / CH (sucet/pocet)
mov DL, AL ; .priemer je v AL, ale je to cislo!!! (napr. 4)
ADD DL, '0' ; ... z cisla urobime znak (4--->'4')
mov ah,02h ;
int 21h ;vypisanie znaku (cislice/vysledku) :-)
koniec:
MOV AX,4C00H
INT 21H ; koniec
END START