.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 0 .code start: mov ax, @data mov ds, ax mov ax,0600h ;czyszczenie ekranu mov bh,07h mov cx,0000h mov dx,184fh int 10h mov ah,02h ;ustawienie kursora mov bh,00h mov dx,0000h int 10h lea dx, NAPIS1 ; wypisanie napisu 'Wprowadzone parametry to' mov ah, 09h int 21h xor si,si ;wyzerowanie si etykieta: mov dl,[es:81h+si] ;w es jest PSP, si w 1 kroku = 0, przenosi do dl mov ah, 02h ; wyświetlenie znaku znajdującego się w dl int 21h inc si ;zwiększa si cmp dl,0dh ; porównuje czy to co odczytane w dl to koniec linii poleceń jnz etykieta ;jeżeli nie to skok do etykieta xor si,si ; wyzerowanie si licz: mov dl,[es:81h+si] ;jak wyżej cmp dl,0dh ;jak wyżej je koniec ;jeżeli porównanie równe 0 skocz do etykiety koniec cmp dl,20h ;porównuje wczytany znak z kodem ASCII spacji je spacja ;jeżeli porównanie równe 0 to skocz do etykiety spacja inc licznik1 ;zwiększ licznik1 o 1 inc si ;zwiększ si jmp licz ;skocz do etykiety licz spacja: inc si ;zwiększa si (dzieki temu spacje nie są wliczone w licznik1) inc licznik2 ;zwiększa licznik 2 ,ilość spacji jest równa ilości wyrazów jmp licz ;skocz do etykiety licz koniec: lea dx, NAPIS2 ;wypisanie napisu 'Ilosc parametrow:' mov ah, 09h int 21h mov ah,02h ; wypisuje zawartość zmiennej licznik 2 mov dl,licznik2 add dl,'0' int 21h lea dx, NAPIS3 ;wyświetlenie napisu 'Ilosc znakow w parametrach:' mov ah, 09h int 21h mov ah,00h mov al,licznik1 ; wypisuje zawartość zmiennej licznik 1 mov cl,10 ;dzielenie al/10 i dodanie 48 (przejście nia kod ascii) do wyniku dzielenia div cl add al,48 add ah,48 mov bh,ah ;zapisanie reszty z dzielenia do bh i dodanie 48 (przejście nia kod ascii) mov dl,al ;wypisanie 1. cyfry (wynik dzielenia) mov ah,02h int 21h mov dl,bh ;reszta z dzielenia do dl mov ah,02h ;wypisanie 2. cyfry (reszta dzielenia) int 21h mov ah,4ch ; koniec programu int 21h end