; wczytywanie i wyswietlanie tekstu wielkimi literami
; (inne znaki sie nie zmieniaja)
.686
. model flat
extern _ExitProcess@4 : PROC
extern __write : PROC ; (dwa znaki podkreslenia)
extern __read : PROC ; (dwa znaki podkreslenia)
extrn _MessageBoxA@16 : near
extrn _MessageBoxW@16 : near
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 ?
;tytul db 'Wynik',0
. 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
; pobranie kolejnego znaku
cmp dl , 0A5H ;ą
je a
cmp dl , 86H ;ć
je ci
cmp dl , 0A9H ;ę
je e
cmp dl , 88H ;ł
je l
cmp dl , 0E4H ;ń
je n
cmp dl , 0A2H ;ó
je o
cmp dl , 98H ;ś
je s
cmp dl , 0ABH ;ź
je z1
cmp dl , 0BEH ;ż
je z2
cmp dl , 20H ;spacja
je spacja
cmp dl , 5CH ;nowa linia
je linia
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
jmp zmiana
spacja: mov dl , 2EH
jmp zmiana
linia:
mov dh , magazyn[ ebx + 1 ]
cmp dh , 6EH
je zmiana2
jmp zmiana
zmiana2:
mov dl , 0AH
jmp zmiana
a: mov dl , 0A4H
jmp zmiana
ci: mov dl , 8FH
jmp zmiana
e: mov dl , 0A8H
jmp zmiana
l: mov dl , 9DH
jmp zmiana
n: mov dl , 0E3H
jmp zmiana
o: mov dl , 0E0H
jmp zmiana
s: mov dl , 97H
jmp zmiana
z1: mov dl , 8DH
jmp zmiana
z2: mov dl , 0BDH
jmp zmiana
zmiana:
; odesłanie znaku do pamieci
mov magazyn[ ebx ] , dl
dalej: inc ebx ; inkrementacja indeksu
cmp dl , 0AH
jnz dalej_2
inc ebx
dalej_2: dec ecx
jnz 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
OyB3Y3p5dHl3YW5pZSBpIHd5c3dpZXRsYW5pZSB0ZWtzdHUgd2llbGtpbWkgbGl0ZXJhbWkKOyAoaW5uZSB6bmFraSBzaWUgbmllIHptaWVuaWFqYSkKLjY4NgoubW9kZWwgZmxhdApleHRlcm4gX0V4aXRQcm9jZXNzQDQgOiBQUk9DCmV4dGVybiBfX3dyaXRlIDogUFJPQyA7IChkd2Egem5ha2kgcG9ka3Jlc2xlbmlhKQpleHRlcm4gX19yZWFkIDogUFJPQyA7IChkd2Egem5ha2kgcG9ka3Jlc2xlbmlhKQpleHRybiBfTWVzc2FnZUJveEFAMTYgOiBuZWFyCmV4dHJuIF9NZXNzYWdlQm94V0AxNiA6IG5lYXIKcHVibGljIF9tYWluCgouZGF0YQp0ZWtzdF9wb2N6CQlkYiAxMCwgJ1Byb3N6ZSBuYXBpc2FjIGpha2lzIHRla3N0ICcKCQkJCWRiICdpIG5hY2lzbmFjIEVudGVyJywgMTAKa29uaWVjX3QJCWRiID8KbWFnYXp5bgkJCWRiIDgwIGR1cCAoPykKbm93YV9saW5pYQkJZGIgMTAKbGljemJhX3puYWtvdwlkZCA/Cjt0eXR1bAkJCWRiICdXeW5paycsMAoKLmNvZGUKX21haW46Cgo7IHd5c3dpZXRsZW5pZSB0ZWtzdHUgaW5mb3JtYWN5am5lZ28KCjsgbGljemJhIHpuYWvDs3cgdGVrc3R1Cgltb3YgZWN4LChPRkZTRVQga29uaWVjX3QpIC0gKE9GRlNFVCB0ZWtzdF9wb2N6KQoJcHVzaCBlY3gKCQoJcHVzaCBPRkZTRVQgdGVrc3RfcG9jegkJCQkJCQk7IGFkcmVzIHRla3N0dQoJcHVzaCAxCQkJCQkJCQkJCQk7IG5yIHVyemFkemVuaWEgKHR1OiBla3JhbiAtIG5yIDEpCgljYWxsIF9fd3JpdGUJCQkJCQkJCQk7IHd5c3dpZXRsZW5pZSB0ZWtzdHUgcG9jemF0a293ZWdvCgkKCWFkZCBlc3AsIDEyIDsgdXN1bmllY2llIHBhcmFtZXRyw7N3IHplIHN0b3N1Cgo7IGN6eXRhbmllIHdpZXJzemEgeiBrbGF3aWF0dXJ5CglwdXNoIDgwCQkJCQkJCQkJCQk7IG1ha3N5bWFsbmEgbGljemJhIHpuYWvDs3cKCXB1c2ggT0ZGU0VUIG1hZ2F6eW4KCXB1c2ggMAkJCQkJCQkJCQkJOyBuciB1cnphZHplbmlhICh0dToga2xhd2lhdHVyYSAtIG5yIDApCgljYWxsIF9fcmVhZAkJCQkJCQkJCQk7IGN6eXRhbmllIHpuYWvDs3cgeiBrbGF3aWF0dXJ5CglhZGQgZXNwLCAxMgkJCQkJCQkJCQk7IHVzdW5pZWNpZSBwYXJhbWV0csOzdyB6ZSBzdG9zdQoKOyBrb2R5IEFTQ0lJIG5hcGlzYW5lZ28gdGVrc3R1IHpvc3RhxYJ5IHdwcm93YWR6b25lCjsgZG8gb2JzemFydSAnbWFnYXp5bicKCjsgZnVua2NqYSByZWFkIHdwaXN1amUgZG8gcmVqZXN0cnUgRUFYIGxpY3piZQo7IHdwcm93YWR6b255Y2ggem5ha8OzdwoJCgltb3YgbGljemJhX3puYWtvdywgZWF4Cgo7IHJlamVzdHIgRUNYIHBlxYJuaSByb2xlIGxpY3puaWthIG9iaWVnw7N3IHBldGxpCgkJbW92IGVjeCwgZWF4CgkJbW92IGVieCwgMAkJCQkJCQkJCQk7IGluZGVrcyBwb2N6YXRrb3d5CnB0bDoJbW92IGRsLCBtYWdhenluW2VieF0JCQkJCQkJOyBwb2JyYW5pZSBrb2xlam5lZ28gem5ha3UKCQkJCQkJCQkJOyBwb2JyYW5pZSBrb2xlam5lZ28gem5ha3UKCgkJY21wIGRsLCAwQTVICQkJCQkJCQkJO8SFCgkJamUgYQoJCWNtcCBkbCwgODZICQkJCQkJCQkJCTvEhwoJCWplIGNpCgkJY21wIGRsLCAwQTlICQkJCQkJCQkJO8SZCgkJamUgZQoJCWNtcCBkbCwgODhICQkJCQkJCQkJCTvFggoJCWplIGwKCQljbXAgZGwsIDBFNEgJCQkJCQkJCQk7xYQKCQlqZSBuCgkJY21wIGRsLCAwQTJICQkJCQkJCQkJO8OzCgkJamUgbwoJCWNtcCBkbCwgOThICQkJCQkJCQkJCTvFmwoJCWplIHMKCQljbXAgZGwsIDBBQkgJCQkJCQkJCQk7xboKCQlqZSB6MQoJCWNtcCBkbCwgMEJFSAkJCQkJCQkJCTvFvAoJCWplIHoyCgoJCWNtcCBkbCwgMjBICQkJCQkJCQkJCTtzcGFjamEKCQlqZSBzcGFjamEKCgkJY21wIGRsLCA1Q0gJCQkJCQkJCQkJO25vd2EgbGluaWEKCQlqZSBsaW5pYQoKCQljbXAgZGwsICdhJwoJCWpiIGRhbGVqCQkJCQkJCQkJCTsgc2tvaywgZ2R5IHpuYWsgbmllIHd5bWFnYSB6YW1pYW55CgkJY21wIGRsLCAneicKCQlqYSBkYWxlagkJCQkJCQkJCQk7IHNrb2ssIGdkeSB6bmFrIG5pZSB3eW1hZ2EgemFtaWFueQoJCXN1YiBkbCwgMjBICQkJCQkJCQkJCTsgemFtaWFuYSBuYSB3aWVsa2llIGxpdGVyeQoJCQoJCWptcCB6bWlhbmEKCgkJc3BhY2phOiBtb3YgZGwsIDJFSAoJCWptcCB6bWlhbmEKCgkJbGluaWE6IAoJCQltb3YgZGgsIG1hZ2F6eW5bZWJ4KzFdCgkJCWNtcCBkaCwgNkVICgkJCWplIHptaWFuYTIKCQkJam1wIHptaWFuYQoKCgkJem1pYW5hMjoKCQltb3YgZGwsIDBBSAoJCWptcCB6bWlhbmEKCgkJYTogbW92IGRsLCAwQTRICgkJam1wIHptaWFuYQoJCWNpOiBtb3YgZGwsIDhGSAoJCWptcCB6bWlhbmEKCQllOiBtb3YgZGwsIDBBOEgKCQlqbXAgem1pYW5hCgkJbDogbW92IGRsLCA5REgKCQlqbXAgem1pYW5hCgkJbjogbW92IGRsLCAwRTNICgkJam1wIHptaWFuYQoJCW86IG1vdiBkbCwgMEUwSAoJCWptcCB6bWlhbmEKCQlzOiBtb3YgZGwsIDk3SAoJCWptcCB6bWlhbmEKCQl6MTogbW92IGRsLCA4REgKCQlqbXAgem1pYW5hCgkJejI6IG1vdiBkbCwgMEJESAoJCWptcCB6bWlhbmEKem1pYW5hOgo7IG9kZXPFgmFuaWUgem5ha3UgZG8gcGFtaWVjaQoJCQltb3YgbWFnYXp5bltlYnhdLCBkbApkYWxlajoJCWluYyBlYngJCQkJCQkJCQkJOyBpbmtyZW1lbnRhY2phIGluZGVrc3UKCQkJY21wIGRsLCAwQUgKCQkJam56IGRhbGVqXzIKCQkJaW5jIGVieApkYWxlal8yOglkZWMgZWN4CgkJCWpueiBwdGwJCQkJCQkJCQkJOyBzdGVyb3dhbmllIHBldGxhCgo7IHd5c3dpZXRsZW5pZSBwcnpla3N6dGHFgmNvbmVnbyB0ZWtzdHUKCQlwdXNoIGxpY3piYV96bmFrb3cKCQlwdXNoIE9GRlNFVCBtYWdhenluCgkJcHVzaCAxCgkJY2FsbCBfX3dyaXRlCQkJCQk7IHd5c3dpZXRsZW5pZSBwcnpla3N6dGHFgmNvbmVnbyB0ZWtzdHUKCQlhZGQgZXNwLCAxMgkJCQkJCTsgdXN1bmllY2llIHBhcmFtZXRyw7N3IHplIHN0b3N1CgkJcHVzaCAwCgkJY2FsbCBfRXhpdFByb2Nlc3NANAkJCQk7IHpha29uY3plbmllIHByb2dyYW11CkVORA==