All pastes #760836 Raw Edit

Stuff

public text v1 · immutable
·published 2007-11-04 12:00 UTC
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 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