ich für einen ARM-Test studierte und ich habe diesen CodeARM, Hilfe LDR Anweisung
AREA datos, DATA, READWRITE
long EQU 7*4
serie DCD 1, 2, 4, 6, 8, 7, 9
resul DCB 0
AREA prog, CODE, READONLY
ENTRY
mov r0, #0
eor r1, r1, r1 ;result variable
ldr r2, =serie **This one**
buc ldr r3, [r2, r0]
add r1, r1, r3
add r0, r0, #4
cmp r0, #long
bne buc
ldr r2, =resul **This one**
str r1, [r2]
fin b fin
END
Und ich bin Debuggen mit Keil, mein Problem ist, dass ich nicht verstehe sehr gut die instructionts markiert .
8: mov r0, #0
0x40000000 E3A00000 MOV R0,#0x00000000
9: eor r1, r1, r1 ;result variable
10:
0x40000004 E0211001 EOR R1,R1,R1
11: ldr r2, =serie
0x40000008 E59F201C LDR R2,[PC,#0x001C]
12: buc ldr r3, [r2, r0]
0x4000000C E7923000 LDR R3,[R2,R0]
13: add r1, r1, r3
0x40000010 E0811003 ADD R1,R1,R3
14: add r0, r0, #4
0x40000014 E2800004 ADD R0,R0,#0x00000004
15: cmp r0, #long
0x40000018 E350001C CMP R0,#0x0000001C
16: bne buc
17:
0x4000001C 1AFFFFFA BNE 0x4000000C
18: ldr r2, =resul
0x40000020 E59F2008 LDR R2,[PC,#0x0008]
19: str r1, [r2]
20:
0x40000024 E5821000 STR R1,[R2]
21: fin b fin
Ich habe diese, wenn ich es mit Keil dissasembly, dann weiß ich, dass LDR R2, =serie
sein die gleiche dass LDR R2,[PC, #offset]
aber der Wert von #offset im wörtlichen Pool platziert werden? Ich weiß nicht, warum der Wert 0x001C
ist.
PD: Sorry für mein Englisch, ich weiß es nicht sehr gut.
das wurde oft gefragt und beantwortet ... –
yeah, ich habe viele Threads gesucht, aber immer noch nicht verstehen, wie kann ich die Adresse von "serie" manuell tun? Ich weiß nicht, wie man den Wert von '# offset' bestimmt, in diesem Fall ist' # 0x001C' – Hector
** Sie ** kann nicht, der Assembler/Linker kann. Der Wert wird in den Literalpool gestellt (Sie kennen den genauen Ort nicht), und der Offset zu dieser Adresse ist in der Anweisung codiert. – Jester