Próbuje zrozumieć jak działa przeszukanie obiektów w tablicy w assemblerze.
liczby DCD 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008
//
1. LDR R0,=liczby ; wczytanie tablicy do rejestru R0
2. MOV R1,#8 ; 8 to liczba elementów w tablicy ??
3. ADD R0,R0,R1,LSL#2 ; R0+=R1*4 ??
4. LDR R2,[R0,#-4]! ; R0-=4 i R2=@R0
Czy byłby mi to ktoś w stanie łopatologicznie wytłumaczyć ten kod, co tu się dzieje krok po kroku. Polecenia komend znam ale nie wiem jak to działa.
Debuguje ten kod w emulatorze i nie rozumiem dlaczego:
- Po wykonaniu pierwszej linijki w rejestrze R0 mam 0x00000008
- Po wykonaniu trzeciej linijki w rejestrze R0 jest 28 ? w R0 mam 8, czyli powinno być: 8 + 8 * 4. A dwa co to wgl oznacza to 28? Domyślam się że rozmiar tablicy -> ma 28 bajtów
- Po wykonaniu 4 linijki cudowanie do rejestru R2 wędruje ostatni element tablicy -> 8. Czyli wychodzi na to że jeden element w tablicy zajmuj 4 bajty