简单的ARM汇编(二)

本文详细介绍了如何使用ARM汇编语言编写一个数据块拷贝程序,通过LDMIA和STMIA指令高效地实现内存数据的复制。程序通过循环操作,根据R2寄存器的计数来完成100个32位数据的拷贝,从源地址R0到目标地址R1。最后,文章展示了运行结果及源代码。
AI助手已提取文章相关产品:

2.1 题目描述

请编写一个ARM数据块拷贝汇编语言程序,将内存中的源数据块的内容拷贝到目标地址。假设r0已经存放了源数据的首地址(自定),r1存放了目标数据地址(自定),r2存放了数据块的总长度100(数据的个数,每个数据都是32位的,即4个字节)。

2.2 设计思

用3个寄存器实现数据块的拷贝,利用LDMIA指令实现从源地址中取数据,利用STMIA指令实现往目标地址中写数据,利用循环操作实现多个数据的拷贝。

2.3 实现代码

1.  首先给寄存器R0、R1和R2赋初始值(寄存器R0存放源数据首地址,R1存放目标数据地址,R2存放数据的总长度即要拷贝数据的个数)。

MOV R0,#0x70000000        ;R0源数据的首地址

MOV R1,#0x10000000        ;R1目标数据地址

MOV R2,#100               ;R2数据块的总长度

2. 执行LDMIA操作,一次读出4个数据放入寄存器R3-R6中。再执行STMIA操作,将读取的R3-R6中的值写入目标内存单元中。

LDMIA R0!,{R3-R6}         ;R3-R6寄存器读取源数据的内容

STMIA R1!,{R3-R6}         ;将R3-R6中的内容拷贝到目标数据地址中

3 .  要拷贝的数据个数做SUB操作减4,若不等于0,则跳转至步骤2做循环操作,直至要拷贝的数据个数为0,结束。

SUB R2,R2,#4                    

CMP R2,#0

BNE LOOP

2.4 运行结果

一个数据占四个字节,100个数据,400个字节,400用16进制表示为190H

LDMIA和STMIA指令都是操作后寄存器地址自动增加的。

源地址中数据见图3,拷贝后目标地址中数据见图4

     

图2 拷贝结束后,R0、R1中的地址

  

图3源地址中的数据

     

图4 拷贝后目标地址中数据

源程序:

AREA F,CODE,READONLY

EXPORT Reset_Handler   

Reset_Handler

MOV R0,#0x70000000        ;R0源数据的首地址

MOV R1,#0x10000000        ;R1目标数据地址

MOV R2,#100               ;R2数据块的总长度

LOOP

LDMIA R0!,{R3-R6}             ;R3-R6寄存器读取源数据的内容

STMIA R1!,{R3-R6}             ;将R3-R6中的内容拷贝到目标数据地址中

SUB R2,R2,#4                    

CMP R2,#0

BNE LOOP

END

您可能感兴趣的与本文相关内容

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值