ARM编程实例.

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档