我爲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 。
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
我有這樣的,如果我使用Keil dissasembly它,那麼我就知道LDR R2, =serie
其同樣是LDR R2,[PC, #offset]
但#offset的價值被放置在文字池?我不知道爲什麼價值是0x001C
。
PD:對不起,我知道它不是很好。
這個問題已經被多次詢問和回答了...... –
是啊,我一直在尋找很多線程,但仍不明白我可以通過手動了解'serie'的地址嗎?不知道如何確定'#offset'的值,在這種情況下是'#0x001C' – Hector
**你不能,彙編器/鏈接器可以。該值放置在文字池中(您不知道確切的位置),並且指令中編碼的地址偏移量被編碼。 – Jester