Witam,
to znowu ja i znów problem z assemblerem :)
Otóż, mam taki kawałek kodu :
movl 12(%ebp), %eax
cmpb $'-', (%eax) ## (%eax) oznacza tak naprawde 0(%eax), czyli pierwszy bajt
jne uzycie
dodam tylko, że po wykonaniu pierwszej z przedstawionych instrukcji, w EAX znajduje się adres (wskaznik po prostu) do stringa, w tym przypadku do pierwszego realnego (pomijając nazwę programu) parametru wywołania programu.
Korzystając z http://download.savannah.gnu.org/releases-noredirect/pgubook/ProgrammingGroundUp-1-0-booksize.pdf postanowiłem przetestować inny, teoretycznie równoważny, sposób dostępu do danych, mianowicie :
movl 12(%ebp), %eax
mov %eax, adres
xor %edi, %edi
mov adres(, %edi, 1), %ebx
cmpb $'-', %ebx
jne uzycie
po takiej zamianie jednak, program działa inaczej, czyli znów (vide : mój poprzedni post) nie sprawdza, czy pierwszym znakiem pierwszego parametru jest '-' (myslnik).
Sprawdzałem gdb i w zmiennej "adres" rzeczywiście przechowywany jest ten sam adres, co w EAX. Jednakże, w EBX, zamiast oczekiwanej wartości 45 (kod ASCII myślnika) otrzymuję wartość 91 i nie mam pojęcia, dlaczego tak się dzieje.
Oczywiście, wiem, że mógłbym stosować po prostu ten sposób, który działa, jednak chciałbym zrozumieć wreszcie sposoby adresowania i stąd ten przykład.
Ponownie zwracam się z prośbą i pytaniem : czy wie ktoś może, dlaczego teraz nie działa ?
Zbychu