; wczytywanie i wyswietlanie tekstu wielkimi literami
; (inne znaki sie nie zmieniaja)
.686
.model flat
extrn _ExitProcess@4 : near
extrn __write : near ; (dwa znaki podkreslenia)
extrn __read : near ; (dwa znaki podkreslenia)
public _main
.data
tekst_pocz db 10, 'Prosze napisac jakis tekst '
db 'i nacisnac Enter', 10
koniec_t db ?
magazyn db 80 dup (?)
nowa_linia db 10
liczba_znakow dd ?
.code
_main:
; wyswietlenie 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 urzadzenia (tu: ekran - nr 1)
call __write ; wyswietlenie tekstu poczatkowego
add esp, 12 ; usuniecie parametrów ze stosu
; czytanie wiersza z klawiatury
push 80 ; maksymalna liczba znaków
push OFFSET magazyn
push 0 ; nr urzadzenia (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 liczbe
; wprowadzonych znaków
mov liczba_znakow, eax
; rejestr ECX pełni role licznika obiegów petli
mov ecx, eax
mov ebx, 0 ; indeks poczatkowy
ptl: mov dl, magazyn[ebx] ; pobranie kolejnego znaku
cmp dl, 'a'
jb dalej ; skok, gdy znak nie wymaga zamiany
cmp dl, 'z'
ja dalej ; skok, gdy znak nie wymaga zamiany
sub dl, 20H ; zamiana na wielkie litery
; odesłanie znaku do pamieci
mov magazyn[ebx], dl
dalej: inc ebx ; inkrementacja modyfikatora
loop ptl ; sterowanie petla
; wyswietlenie przekształconego tekstu
push liczba_znakow
push OFFSET magazyn
push 1
call __write ; wyswietlenie przekształconego
tekstu
add esp, 12 ; usuniecie parametrów ze stosu
push 0
call _ExitProcess@4 ; zakonczenie programu
END