Witam,
Piszę mój pierwszy program w assemblerze, a konkretniej dll'kę z funkcją funkcją szyfrującą przy użyciu szyfru Beaufort'a znak podany w parametrze używając klucza podanego jako drugi parametr. Zasadniczo program działa tak jak powinien, ale muszę go trochę udoskonalić.
Rzecz w tym żeby program sprawdzał czy znak podany w parametrze jest polskim znakiem, a jeśli tak, to ma go zamienić na jego odpowiednik w alfabecie łacińskim (czyli np ą -> a , ę -> e, ł -> l etc.). Próbowałem coś takiego napisać ale mój pomysł nie działa. Oto mój kod (w kodzie jest tylko sprawdzanie znaku 'Ą', jak to ogarnę to z pozostałymi sobie sam poradzę):
.686
.387
.model flat, stdcall
.xmm
.data
.code
cipherCharAsm proc uses ebx znak:DWORD, klucz:DWORD
mov eax, klucz ;wrzucenie klucza do EAX
mov ebx, znak ;wrzucenie znaku do EBX
cmp eax, 'Ą' ;sprawdzenie czy klucz w EAX to 'Ą'
jne szyfruj ;jeśli nie, to przejdź to szyfrowania
mov eax, 'A' ;jeśli tak, to wrzuć 'A' do EAX
szyfruj: or eax, 20h ;podnieś klucz do uppercase'a
or ebx, 20h ;podnieś znak do uppercase'a
sub ebx, 41h ;odejmij od znaku 41h (czyli uzyskaj jego wartość liczbową, A=0, B=1, C=2, .. itd)
sub eax, ebx ;odejmij od klucza wartość liczbową znaku
cmp eax, '@' ;sprawdź czy otrzymany znak jest mniejszy od 'A'
jg zwroc ;jeżeli nie to przejdź do zwracania
add eax, 1Ah ;jeżeli tak, to dodaj do niego 1Ah
zwroc: ret ;wartość jest zwracana przez akumulator
cipherCharAsm endp
end