Witam!
Takie cos. Ogladałem sobie kod startowy generowany przez AS i cos takiego zauwazylem:
A mamy to:
<----------- tu debugger pokazuje wartość 0x30 w rejestrze R25
00000093 LD R25,Z+ Load indirect and postincrement
00000094 CPSE R25,R1 Compare, skip if equal
00000095 RJMP PC-0x0008 Relative jump
Wszystko sie wykonuje w porzadku do miejsca oznaczonego <---------- Tu
Z nieznanych mi przyczyn po wywołaniu sprintf zapisuje do rejestru wartość z powietrza 0x30. (teoretyczie pierwszy znak stringu inicjalizujacego)
wiem (i nie o to pytam) ze taka inicjalizacja *x = "dfdfddfd" jest nieprawidłowa w tym sensie ze x zostanie przypisany adres tego ciagu znaków, znajdujacy sie statycznie w .data, bez alokacji na stosie i inicjalizacji wartości.
Dlaczego ładuje do R25 dziwna wartosc 0x30 , w złym miejscu programu.
Takie cos. Ogladałem sobie kod startowy generowany przez AS i cos takiego zauwazylem:
Kod: C / C++
A mamy to:
Kod: ARM assembler
00000093 LD R25,Z+ Load indirect and postincrement
00000094 CPSE R25,R1 Compare, skip if equal
00000095 RJMP PC-0x0008 Relative jump
Wszystko sie wykonuje w porzadku do miejsca oznaczonego <---------- Tu
Z nieznanych mi przyczyn po wywołaniu sprintf zapisuje do rejestru wartość z powietrza 0x30. (teoretyczie pierwszy znak stringu inicjalizujacego)
wiem (i nie o to pytam) ze taka inicjalizacja *x = "dfdfddfd" jest nieprawidłowa w tym sensie ze x zostanie przypisany adres tego ciagu znaków, znajdujacy sie statycznie w .data, bez alokacji na stosie i inicjalizacji wartości.
Dlaczego ładuje do R25 dziwna wartosc 0x30 , w złym miejscu programu.
