Ich analysiere die folgende ARM-Assembly im VIsUAL-Emulator, einer einfachen Funktion, die ein Array von Konstanten durchläuft und die größte Zahl auswählt.Warum ist eine Verschiebung erforderlich, um auf die Array-Position zuzugreifen?
mov r0, r13 ; pass the memory address where you stored the array's contents
mov r1, #20 ; pass the second argument count to the function
mov r5, #04
mov r6, #01
mov r7, #13
mov r8, #42
mov r9, #25
stmfa r13, {r5,r6,r7,r8,r9}
bl max
end
max
mov r2, #0
L2
cmp r2, r1
bge L5
ldr r12, [r0, r2, lsl #2]
add r2, r2, #1
cmp r3, r12
movlt r3, r12
b L2
L5
mov r0, r3
Es funktioniert bestimmt als nur eine Sache, die ich nicht verstehe, ist in:
ldr r12, [r0, r2, lsl #2]
Es ist in r12 Laden den der aktuelle Wert des Feldes, dessen Start durch r0 in der spitz aktueller Index r2, aber warum gibt es dort eine logische Verschiebung?
Da Wörter 4 Bytes sind, müssen Sie um 4 skalieren, was eine Verschiebung von links nach links ist. – Jester