在keil uvision4上用arm写了一个冒泡排序的程序:
AREA RESET,CODE,READONLY
ENTRY
start
MOV r4,#0
LDR r6,=src
ADD r6,r6,#len
outer
LDR r1,=src
inner
LDR r2,[r1]
LDR r3,[r1,#4]
CMP r2,r3
STRGT r3,[r1]
STRGT r2,[r1,#4]
ADD r1,r1,#4
CMP r1,r6
BLT inner
ADD r4,r4,#4
CMP r4,#len
SUBLE r6,r6,#4
BLE outer
stop
MOV r0,#0x18
LDR r1,=0x20026
SWI 0x123456
AREA Array,DATA,READWRITE
src
DCD 2,3,10,8,14,1,20
len EQU 7*4
END
sct文件:
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
LR_ROM1 0x00000000 0x00000100 { ; load region size_region
ER_ROM1 0x00000000 0x00000100 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_RAM1 0x00400000 UNINIT 0x00001000 { ; RW data
.ANY (+RW +ZI)
}
}
问题是 src标签指的地址为0x400000,但是 DCD 2,3,10,8,14,1,20 分配的这个数组却在大概在0x00000058的位置,所以永远无法获得这些数据。
也就是说数据段怎么规定地址呢? |