Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; wczytywanie i wyświetlanie tekstu wielkimi literami
- ; (inne znaki się nie zmieniają)
- .686
- .model flat
- extern _ExitProcess@4 : PROC
- extern _MessageBoxA@16 : PROC
- extern _MessageBoxW@16 : PROC
- extern __write : PROC ; (dwa znaki podkreślenia)
- extern __read : PROC ; (dwa znaki podkreślenia)
- public _main
- .data
- tekst_pocz db 10, 'Proszę napisać jakiś tekst '
- db 'i nacisnac Enter', 10, 0
- koniec_t db ? ; wartość nieokreślona
- naglowek db 'AKO', 0
- magazyn dw 800 dup (0) ;
- nowa_linia db 10
- liczba_znakow dd ? ; wartość nieokreślona
- .code
- _main:
- ; wyświetlenie tekstu informacyjnego
- ; liczba znaków tekstu
- mov ecx,(OFFSET koniec_t) - (OFFSET tekst_pocz)
- push ecx
- push OFFSET tekst_pocz ; adres tekstu
- push 1 ; nr urządzenia (tu: ekran - nr 1)
- call __write ; wyświetlenie tekstu początkowego
- add esp, 12 ; usuniecie parametrów ze stosu
- ; czytanie wiersza z klawiatury
- push 80 ; maksymalna liczba znaków
- push OFFSET magazyn
- push 0 ; nr urządzenia (tu: klawiatura - nr 0)
- call __read ; czytanie znaków z klawiatury
- add esp, 12 ; usuniecie parametrów ze stosu
- ; kody ASCII napisanego tekstu zostały wprowadzone
- ; do obszaru 'magazyn'
- ; funkcja read wpisuje do rejestru EAX liczbę
- ; wprowadzonych znaków
- mov liczba_znakow, eax
- ; rejestr ECX pełni rolę licznika obiegów pętli
- mov ecx, eax
- mov ebx, 0
- mov bp, 0 ; indeks początkowy
- ptl: mov dx, magazyn[bp] ; pobranie kolejnego znaku
- cmp dl, 0A5H ; ą
- je zamiana_a ;
- cmp dl, 086H ; ć
- je zamiana_c ;
- cmp dl, 0A9H ; ę
- je zamiana_e ;
- cmp dl, 88H ; ł
- je zamiana_l ;
- cmp dl, 0E4H ; ń
- je zamiana_n ;
- cmp dl, 0A2H ; ó
- je zamiana_o ;
- cmp dl,98H ; ś
- je zamiana_s ;
- cmp dl, 0ABH ; ź
- je zamiana_ziet
- cmp dl, 0BEH ; ż
- je zamiana_zet
- cmp dl, 'a'
- jb dalej ; skok, gdy znak nie wymaga zamiany
- cmp dl, 'z'
- ja dalej ; skok, gdy znak nie wymaga zamiany
- sub dx, 20H ; zamiana na wielkie litery
- jmp zamagazynowanie
- zamiana_a: mov dx, 105H
- jmp zamagazynowanie
- zamiana_c: mov dx, 107H
- jmp zamagazynowanie
- zamiana_e: mov dx, 119H
- jmp zamagazynowanie
- zamiana_l: mov dx, 142H
- jmp zamagazynowanie
- zamiana_n: mov dx, 144H
- jmp zamagazynowanie
- zamiana_o: mov dx, 0F3H
- jmp zamagazynowanie
- zamiana_s: mov dx, 15BH
- jmp zamagazynowanie
- zamiana_ziet: mov dx, 17AH
- jmp zamagazynowanie
- zamiana_zet: mov dx, 17CH
- jmp zamagazynowanie
- ; odesłanie znaku do pamięci
- zamagazynowanie: mov magazyn[ebx], dx
- dalej: inc ebx ; inkrementacja indeksu
- inc ebx
- inc bp
- dec ecx
- jnz ptl ; sterowanie pętlą
- ; wyświetlenie przekształconego tekstu
- mov dx, 0
- mov magazyn[ebx], dx
- push liczba_znakow
- push OFFSET magazyn
- push 1
- call __write ; wyświetlenie przekształconego tekstu
- add esp, 12 ; usuniecie parametrów ze stosu
- push 0
- push OFFSET naglowek
- push OFFSET magazyn
- push 0
- call _MessageBoxW@16
- push 0
- call _ExitProcess@4 ; zakończenie programu
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement