Witam, mam następujący problem: mam za zadanie wykonać banalną rzecz- zamianę liter w wyrazie z dużych na małe. Żeby uprościć początkową fazę, próbuję zmienić wielkość litery 'H' z dużej na małą. Wiem, że można to wykonać operacją XOR na danej literze i stałej 0x20. Niestety nie wiem, dlaczego w programie to nie działa... P.S. próbowałem przenieść wybraną literę do al i ten rejestr xor-ować, ale potem wyskakiwał mi błąd konsolidacji: "relocation truncated to fit R_386_16 against .data", więc zaniechałem tego i postanowiłem operować na eax. Co ciekawe, litera wyświetla się na ekranie (oczywiście jako duże 'H'), gdy zamiast XOR użyłem OR. Natomiast przy operacji XOR nic się nie wyświetla. Po debuggowaniu programem gdb widziałem, że w rejestrze eax istotnie zmieniła się wartość przechowywana, więc operacja XOR wydaje mi się działać poprawnie. Nie wiem tylko, dlaczego przeniesienie z eax do ecx kończy się fiaskiem (chyba, że błąd jest gdzie indziej). Czy ktoś może pomóc? :)
section .data
text db "HellO", 0xa
section .text
global _start
_start:
mov edx, 1 ; dlugosc tekstu- tu: 1, bo przenosze tylko jeden znak
mov eax, text ; wskaznik na tekst przenoszony do rejestru eax
xor eax, 0x20 ; zamiana wielkosci litery z akumulatora na mala
mov ecx, eax ; przeniesienie tej litery do rejestru ecx celem wyswietlenia
mov ebx, 1 ; 1 == STDOUT
mov eax, 4 ; 4 == sys_write
int 0x80 ; call kernel
; EXIT_CODE
mov eax, 1
mov ebx, 0
int 0x80