Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .686
- .model flat
- extern _ExitProcess@4 : PROC
- extern __read : PROC
- extern __write : PROC
- public _main
- .data
- max dd 0
- ile_liczb dd 0
- indeks dd ?
- obszar db 10 dup (?)
- znaki db 10 dup (?)
- dziesiec dd 10
- .code
- _wczytajEAX PROC
- ;-EAX bo do niego chcemy wczytac
- ;-ebp bo nie modyfikujemy bazy stosu
- ;-esp bo go nigdy nie modyfikujemy w podprogramie bo powrot
- push ebx
- push ecx
- push edx
- push esi
- push edi
- push dword ptr 12 ;liczba znakow
- push dword ptr offset obszar ;adres tekstu
- push dword ptr 0 ;nr urzadzeniu tu klawiatura
- call __read
- add esp,12 ;usuniecie parametrow ze stosu
- mov eax, 0 ;zerujemy eax
- mov ebx, 0 ;indeks
- mov ecx, 0 ;rejest do wczytywania liczby
- ptl:
- mov cl, obszar[ebx] ;wczytaj kolejna cyfre do cl
- cmp cl, 0AH ;sprawdz czy nie enter
- jz koniec ;jesli tak to koniec wczytywania
- mul dziesiec ;pomnoz na poczatku razy 10
- sub cl, 30H ;jesli nie to konwertuj na inta
- add eax, ecx ;dodaj do wyniku jako jednosci
- inc ebx ;zwiekszamy indeks
- jmp ptl
- koniec:
- pop edi
- pop esi
- pop edx
- pop ecx
- pop ebx
- ret
- _wczytajEAX ENDP
- wyswietl_EAX PROC
- pusha
- mov esi,10 ;indeks w tablicy znaki
- mov ebx,10 ;dzielnik
- konwersja:
- mov edx,0 ;wyczyszczenie reszty
- div ebx ;podzielenie zawartosci rejestru eax przez dzielnik znajdujacy sie w rejestrze ebx
- add dl,30h ;zamiana cyry na kod ASCII w celu jej wyswietlenia
- mov znaki[esi],dl ;przesuniecie wartosci z dl do tablicy znakow pod odpowiedni indeks
- dec esi ;zmniejszenie indeksu w tablicy znakow
- cmp eax,0 ;porownanie eax z 0 aby sprawdzic czy jest cos jeszcze do podzielenia
- jne konwersja
- wyswietl:
- mov byte PTR znaki[esi],0Ah ;dodanie znaku nowej linii
- mov byte PTR znaki[11],0h ;dodanie identyfikatora konca ciagu znakow
- lea eax,[znaki+esi] ;ustalenie adresu ostatnio wpisanej cyfry
- mov edx,12
- sub edx,esi ;ustalenie ilosci znakow do wyswietlenia
- push edx ;liczba znakow do wyswietlenia
- push dword PTR eax ;adres miejsca pod ktorym znajduja sie znaki do wyswietlenia
- push 1
- call __write
- add esp,12 ;czyszczenie stosu
- popa
- ret
- wyswietl_EAX ENDP
- _main PROC
- call _wczytajEAX ;ile liczb wczytujemy
- mov ile_liczb, eax ;zapisujemy
- call _wczytajEAX ;ile ktory indeks wczytujemy
- mov indeks, eax ;wsadzamy indeks potrzebny
- mov max, 0
- mov ebx, 0 ;indeks
- ptl:
- call _wczytajEAX
- cmp ebx, indeks ;sprawdzamy czy juz zaczynamy porownywac
- jb koniec ;jesli nie to zwiekszamy indeks i wczytujemy kolejna liczbe
- cmp max, eax ;jesli tak to sprawdzamy czy wczytana liczba jest wieksza od obecnego maxa
- ja koniec ;jesli nie to idziemy na koniec
- mov max, eax ;jesli tak to przesuwamy ja do maxa
- koniec:
- inc ebx ;zwiekszamy indeks ebx
- cmp ebx, ile_liczb ;sprawdzamy czy nie przestac wczytywac
- jnz ptl
- mov eax, max ;przesuwamy max do eax
- call wyswietl_EAX
- push 0
- call _ExitProcess@4
- _main ENDP
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement