ARM体系结构与编程学习(五)
来源:互联网 发布:淘宝企业店铺公司简介 编辑:程序博客网 时间:2024/09/21 06:18
4.6.2 arm汇编实例
;设置本段程序的名称及属性
AREA BLOCK , CODE , READONLY
;设置将要复制的字数
num EQU 20
;标识程序入口点
ENTRY
Start
;R0寄存器指向源数据区src
LDR R0,=src
;R1寄存器指向目标数据区dst
LDR R1 ,=dst
;R2指定将要复制的字数
MOV R2, #num
;设置数据栈指针(R13),用于保存工作寄存器数值(设定SP堆栈开始地址为0x400)
MOV SP,#0X400
;进行以8个字为单位的数据复制
blockcopy
;需要进行的以8个字为单位的复制次数
MOVS R3,R2,LSR #3
;对剩余不足8个字的数据,,跳转到copywords,以字为单位进行复制
BQE copywords
;保存工作寄存器
STMFD SP!,{R4-R11}
Octcopy
;从源数据读取8个字的数据,放到8个工作寄存器中,并更新目标数据区指针R0
LDMIA R0!,{R4-R11}
;将这8个字数据写入到目标数据区中,并更新目标数据区指针R1
STMIA R1!,{R4-R11}
;将块复制次数减1
SUBS R3,R3,#1
;循环,直到完成以8字为单位的块复制
BNE Octcopy
;恢复工作寄存器值
LDMFD SP!,{R4-R11}
copywords
;剩余不足8个字的数据的字数(逻辑与,把R2 前7位扔掉)
ANDS R2,R2,#7
;数据复制完成
BEQ stop
wordcopy
;从源数据读取1个字的数据,放到寄存器R3中,并更新目标数据区指针R0
LDR R3,[R0],#4
;将这R3中数据写入到目标数据区中,并更新目标数据区指针R1
STR R3 ,[R1],#4
;将字数减1
SUBS R2,R2,#1
;循环,直到完成以字为单位的数据复制
BNE wordcopy
stop
;调用angel_SWIreason_ReportException
;ADP_Stopped_ApplicationExit
;ARM semihosting SWI
;从应用程序中退出
MOV R0, #0X18
LDR R1,=0X20026
SWI 0X123456
;定义数据区blockdata
AREA Blockdata, DATA, READONLY
;定义源数据src及目标数据区dst
src DCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4
dst DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;结束汇编
END
- ARM体系结构与编程学习(五)
- ARM体系结构与编程学习(五)
- ARM体系结构与编程学习(五)
- ARM体系结构与编程学习(一)
- ARM体系结构与编程学习(二)
- ARM体系结构与编程学习(三)
- ARM体系结构与编程学习(四)
- ARM体系结构与编程学习(六)
- ARM体系结构与编程学习(七)
- ARM体系结构与编程学习(八)
- ARM体系结构与编程学习(九)
- ARM体系结构与编程学习(十)
- ARM体系结构与编程学习(十一)
- ARM体系结构与编程学习(十二)
- ARM体系结构与编程学习(十三)
- ARM体系结构与编程学习(一)
- ARM体系结构与编程学习(二)
- ARM体系结构与编程学习(三)
- 用HTML5来开发一款android本地化App
- 各路推荐算法
- i/o使用,文件操作
- webview中cookie的读取与保存
- linux下修改主机名(red hat 5.5)
- ARM体系结构与编程学习(五)
- 10716 - Evil Straw Warts Live
- 第三次C程序设计上机报告
- CCommandLineInfo详解-启动不创建新文档【对单文档有问题?】
- 惯性的力量
- Oracle RMAN的备份与恢复命令详解(一)
- ARM体系结构与编程学习(六)
- 屏幕坐标系和窗口客户区坐标系最明显的区别
- 第五周上机任务项目3-(编写基于对象的程序)