rendered paste body.model small
.stack 100h
.data
NAPIS1 db 'Wprowadzone parametry to:$'
NAPIS2 db 10,13,'Ilosc parametrow:$'
NAPIS3 db 10,13,'Ilosc znakow w parametrach:$'
licznik1 db 0
licznik2 db -1
li dw 0
li1 dw 0
.code
start:
mov ax,@data
mov ds,ax
mov ax,0600h
mov bh,07h
mov cx,0000h
mov dx,184fh
int 10h
mov dx,offset NAPIS1
mov ah,09h
int 21h
xor si,si
etykieta:
mov dl,[es:81h+si]
mov ah,2
int 21h
inc si
cmp dl,0dh
jnz etykieta
xor si,si
licz:
mov dl,[es:81h+si]
cmp dl,0dh
je koniec
cmp dl,20h
je spacja
inc licznik1
inc si
jmp licz
spacja:
inc si
inc licznik2
jmp licz
koniec:
inc licznik2
;==========================
mov al,licznik2
mov bl, 10 ; ustawiamy dzielnik na 10
dzielenie:
mov ah, 00h ; zerujemy rejestr ah
div bl ; dzielimy kod znaku przez 10
push ax ; wrzucamy wynik na stos
add li, 1 ; zwiekszamy licznik
cmp al, 0 ; sprawdzamy, czy reszta jest rowna zero (= koniec dzielenia)
jg dzielenie ; jesli nie, dzielimy dalej
kon:
mov dx,offset NAPIS2
mov ah,09h
int 21h
mov cx, li ; ustawiamy licznik petli rowny zmiennej licz
wypisz:
pop dx ; zdejmujemy wartosc ze stosu
mov ah, 02h ; wywolujemy funkcje wyswietlajaca znak
add dh, '0' ; dodajemy '0' (48)
mov dl, dh
int 21h
loop wypisz
;===========================
mov al,licznik1
mov bl, 10 ; ustawiamy dzielnik na 10
dzielenie1:
mov ah, 00h ; zerujemy rejestr ah
div bl ; dzielimy kod znaku przez 10
push ax ; wrzucamy wynik na stos
add li1, 1 ; zwiekszamy licznik
cmp al, 0 ; sprawdzamy, czy reszta jest rowna zero (= koniec dzielenia)
jg dzielenie1 ; jesli nie, dzielimy dalej
kon1:
mov dx,offset NAPIS3
mov ah,09h
int 21h
mov cx, li1 ; ustawiamy licznik petli rowny zmiennej licz
wypisz1:
pop dx ; zdejmujemy wartosc ze stosu
mov ah, 02h ; wywolujemy funkcje wyswietlajaca znak
add dh, '0' ; dodajemy '0' (48)
mov dl, dh
int 21h
loop wypisz1
;===========================
mov ah,4CH
int 21H
end start
end