私はARMのテストのために勉強していますし、私はこのコードARM、ヘルプLDR命令
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
を持っていると私は、Keil社でそれをデバッグするよ、私の問題は、私はinstructiontsがマークされ、非常によく理解していないということです。私はKeil社でそれをdissasembly場合
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
私はその後、私は
LDR R2,[PC, #offset]
が、#offsetの値は、リテラルプールに配置されていることをその
LDR R2, =serie
その同じ知っている、これを持っていますか?私は値が
0x001C
である理由を知らない。
PD:申し訳ありませんが私の英語のために、私は非常に良くないことを知っています。
これは何度も尋ねられています... –
ええ、私は多くのスレッドを探していますが、私はそれを手動で行う 'serie 'のアドレスを知ることができますか? '#offset'の値を決定する方法は分かりません。その場合、'#0x001C' – Hector
**アセンブラ/リンカはできません。値はリテラルプールに置かれます(正確な位置はわかりません)。そのアドレスへのオフセットは命令にエンコードされます。 – Jester