ARM编程实例.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第四章ARM程序设计基础 1 汇编语言程序示例
Example1/Example1.DOC
; 例一:数据块拷贝,利用LDR/STR指令
; 项目名:Example1.mcp,文件名:Example1.s ——————————————————————————————————
AREA Block, CODE, READONLY
num EQU 10
ENTRY
start
LDR R0, =src
LDR R1, =dst
MOV R2, #num
blockcopy
LDR R3, [R0], #4
STR R3, [R1], #4
SUBS R2, R2, #1
BNE blockcopy
B .
AREA BlockData, DATA, READWRITE
src DCD 0,1,2,3,4,5,6,7,8,9
dst SPACE 10*4
END
Example2/Example2.DOC
; 例二:数据块拷贝,利用LDM/STM指令
; 项目名:Example2.mcp,文件名:Example2.s ——————————————————————————————————
AREA Block, CODE, READONLY
num EQU 20
ENTRY
start
LDR R0, =src
第四章ARM程序设计基础 2
LDR R1, =dst
MOV R2, #num
MOV SP, #0x400
blockcopy
MOVS R3, R2, LSR #3
BEQ copywords
STMFD SP!, {R4-R11}
octcopy
LDMIA R0!, {R4-R11}
STMIA R1!, {R4-R11}
SUBS R3, R3, #1
BNE octcopy
LDMFD SP!, {R4-R11}
copywords
ANDS R2, R2, #7
BEQ stop
wordcopy
LDR R3, [R0], #4
STR R3, [R1], #4
SUBS R2, R2, #1
BNE wordcopy
stop
B .
AREA BlockData, DATA, READWRITE
src DCD 0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9
dst SPACE 20*4
END
Example3/Example3.DOC
;例三:ADR伪指令
;项目名:Example3.mcp,文件名:Example3.s ———————————————————————————————————————
第四章ARM程序设计基础 3
AREA adrlabel1, CODE, READONLY
ENTRY
start
BL func
B .
LTORG
func
ADR R0, start
ADR R1, DataArea
;ADR R2, DataArea+4300
ADRL R3, DataArea+4300
MOV PC, LR
DataArea
SPACE 8000
END
Example4/Example4.DOC
;例四:LDR伪指令
;项目名:Example4.mcp,文件名:Example4.s ———————————————————————————————————————AREA LDRlabel1, CODE, READONLY
ENTRY
start
BL func1
BL func2
B .
func1
LDR R0, =start
LDR R1, =Darea+12
LDR R2, =Darea+6000
MOV PC, LR
LTORG
第四章ARM程序设计基础 4
func2
LDR R3, =Darea+6000
LDR R4, =Darea+6004
MOV PC, LR
Darea
SPACE 8000
END
Example5/Example5.DOC
;例五:利用跳转表实现程序跳转
;项目名:Example5.mcp,文件名:Example5.s ———————————————————————————————————————
AREA Jump, CODE, READONLY
num EQU 2
ENTRY
start
MOV R0, #0
MOV R1, #3
MOV R2, #2
BL arithfunc
B .
arithfunc
CMP R0, #num
MOVHS PC, LR
ADR R3, JumpTable
LDR PC, [R3,R0,LSL #2]
JumpTable
DCD DoAdd
DCD DoSub
DoAdd
ADD R0, R1, R2