All pastes #784422 Raw Edit

Untitled

public text v1 · immutable
·published 2007-11-19 18:12 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 -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