; 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