mycode.s
EXPORT mycode
AREA ADDCODE, CODE, READONLY
mycode
LDR R0, =src ;R0指向src的起始地址
LDR R1, =dst ;R1指向dst的起始地址
BL strcpy ;小于N-1继续执行外循环
deadloop
B deadloop
strcpy
LDRB R2, [R0], #1 ;将R0指向的字节存入R2中
;R0自加1,指向下一个字节
STRB R2, [R1], #1 ;将R2内容存入R1指向的字节单元中
;R1自加1,指向下一个字节
CMP R2, #0 ;检查R2是否为0
BNE strcpy ;没有遇到结束符0时,继续拷贝下一个字节
MOV PC, LR ;子程序返回
AREA NUM1, DATA, READONLY
src DCB "Hello world! I am an ARM program!", 0
AREA NUM2, DATA, READWRITE
dst SPACE 100
END
startup.s
STACK_TOP EQU 0x20005000 ; 宏定义主堆栈指针STACK_TOP
IMPORT mycode
AREA RESET, CODE ; 代码段的名字RESET---名字必须是RESET
DCD STACK_TOP ; 向量表第一项:堆栈指针值
DCD start ; 向量表第二项:主程序入口地址
ENTRY ; 程序的入口
start
LDR R0, =mycode
BX R0
deadloop
B deadloop ; 在此死循环,空等待
NOP
END