我用ADS带的例子验证的。
AREA StrCopy, CODE, READONLY
ENTRY ; mark the first instruction to call
start
LDR r1, =srcstr ; pointer to first string
LDR r0, =dststr ; pointer to second string
BL strcopy ; call subroutine to do copy
stop
MOV r0, #0x18 ; angel_SWIreason_ReportException
LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit
SWI 0x123456 ; ARM semihosting SWI
strcopy
LDRB r2, [r1],#1 ; load byte and update address
STRB r2, [r0],#1 ; store byte and update address;
CMP r2, #0 ; check for zero terminator
BNE strcopy ; keep going if not
MOV pc,lr ; Return
AREA Strings, DATA, READWRITE
LTORG
srcstr DATA DCB "First string - source",0
dststr DCB "Second string - destination",0
END
这样做吧,写两个文件
第一个
IMPORT srcstr
AREA StrCopy, CODE, READONLY
ENTRY ; mark the first instruction to call
start
LDR r1, =srcstr ; pointer to first string
LDR r0, =dststr ; pointer to second string
BL strcopy ; call subroutine to do copy
stop
MOV r0, #0x18 ; angel_SWIreason_ReportException
LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit
SWI 0x123456 ; ARM semihosting SWI
strcopy
LDRB r2, [r1],#1 ; load byte and update address
STRB r2, [r0],#1 ; store byte and update address;
CMP r2, #0 ; check for zero terminator
BNE strcopy ; keep going if not
MOV pc,lr ; Return
LTORG
dststr DCB "Second string - destination",0
END
第二个
AREA DATASEC, DATA, READWRITE
EXPORT srcstr
srcstr DCD 0
end