ARM汇编指令学习 实现数据块拷贝

发布者:创意狂想最新更新时间:2016-06-24 来源: eefocus关键字:ARM  汇编指令  数据块拷贝 手机看文章 扫描二维码
随时随地手机看文章
这个学期,系里开了嵌入式的课程,正好借助这个机会系统地学习下ARM的指令系统。这个系列文章主要是通过一些简单的汇编程序实例来学习ARM指令,使用的编译器是ADS 1.2。

程序要求:

设计一段程序完成数据块的,数据从源数据区snum到目标数据区dnum,数据量大小为NUM字(1个字=4个字节),时以8个字为单位进行,对于最后所剩不到8个字的数据,以字为单位进行。

程序清单:

ARM汇编指令学习  实现数据块拷贝
 1 ;==============================================================================
 2 ; blocks.s: 将数据从源数据区snum到目标数据区dnum,数据量大小为NUM字
 3 ;            时以8个字为单位进行,最后不够8个字的数据按1个字为单位
 4 ;==============================================================================
 5 
 6 NUM    EQU    20                         ; NUM表示有20个字(80字节)数据,以字为单位,宏定义要顶格书写
 7 
 8     AREA    Init, CODE, READONLY         ; 定义一个代码段,段名为Init,属性为READONLY 
 9     CODE32                               ; 告诉汇编编译器后面的指令序列为32位的ARM指令,
10                                          ; 该伪操作只是告诉编译器后面指令的类型,其本身
11                                          ; 并不进行程序状态切换
12     ENTRY                                ; 指定程序的入口点
13 
14 
15 ;变量的初始化
16 START
17     LDR    R0,    =SRC                    ; R0指向源数据区起始地址
18     LDR    R1,    =DST                    ; R1指向目的数据区起始地址
19     MOV    R2,    #NUM                    ; R2存放待数据量大小,以字为单位
20     MOV    SP, #0X400                     ; 堆栈指针指向0X400,堆栈增长模式由装载指令的类型域确定    
21 
22 ;确定条件及保存现场
23 BLKCOPY
24     MOV    R3,    R2,    LSR    #3        ; 将R2中值除以8后的结果存放在R3,R3中值表示NUM中有多少个8字单元
25     BEQ    COPYWORDS                      ; 若Z=1(R3=0,数据少于1个8字单元),则跳转到COPYWORDS处,运行少于8字单元数据处理程序
26     STMFD    SP!,    {R4-R11}             ; 保存R4-R11的内容到堆栈,并更新栈指针,FD:满递减堆栈,由此可知堆栈长向
27 
28 ;8字单元数据主程序
29 OCTCOPY
30     LDMIA    R0!,    {R4-R11}             ; 从R0所指的源数据区装载8个字数据到R4-R11中,每次装载1个字后R0中地址加1,最后更新R0中地址
31     STMIA    R1!,    {R4-R11}             ; 将R4-R11的8个字数据存入R1所指的目的数据区,每次装载1个字后R1中地址加1,最后更新R1中地址
32     SUBS    R3,    R3,    #1              ; 每一次,则R3=R3-1,表示已经了1个8字单元,结果影响CPSR
33     BNE    OCTCOPY                        ; 若CPSR的Z=0(即运算结果R3不等于0),跳转到OCTCOPY,继续下一个8字单元数据
34     LDMFD    SP!,    {R4-R11}             ; 将堆栈内容恢复到R4-R11中,并更新堆栈指针,此时整8字单元数据已经完成,且出栈模式应和入栈模式一样
35 
36 ;少于8字单元数据处理程序
37 COPYWORDS
38     ANDS    R2,R2,    #7                  ; 得到NUM除以8后余数,即未满8字单元数据的字数(1个字=4个字节)
39     BEQ    STOP                           ; 若R2=0(NUM有整数个8字单元),则停止
40 
41 ;单字单元数据程序,用来处理不足8字单元数据    
42 WORDCOPY
43     LDR    R3,    [R0],    #4             ; 将R0所指源数据区的4个字节(1个字)数据装载至R3,然后R0=R0+4
44     STR    R3,    [R1],    #4             ; 将R3中4个字节(1个字)数据存到R1所指目的数据区,然后R1=R1+4
45     SUBS    R2,    R2,    #1              ; 数据传输控制计数器减1(其总是小于8),成功一个字数据
46     BNE    WORDCOPY                       ; 若R2不等于0,则转到WORDCOPY,继续下一个字数据
47     
48 ;停止操作死循环
49 STOP
50     B    STOP
51 
52 ;数据缓冲池
53 LTORG                                     ;声明一个数据缓冲池的开始,一般在代码的最后面
54 ;定义源数据区,每个数据均是字型(占4个字节)
55 ;DCD,分配一段字内存单元(分配的内存是字对齐的),并用后续的数据初始化该段内存
56 SRC    DCD    1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4    
57 
58 ;定义目的数据区,并初始化为0
59 DST    DCD    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
60 
61 
62 ;源程序结尾
63     END
 
 

关键字:ARM  汇编指令  数据块拷贝 引用地址:ARM汇编指令学习 实现数据块拷贝

上一篇:嵌入式Linux+ARMARM体系结构与编程(ARM汇编指令)
下一篇:ARM汇编指令学习之开篇

推荐阅读最新更新时间:2024-03-16 14:58

ARM 如何实现绝对地址的跳转
基于 b跳转指令,ldr伪指令,ldr加载指令分析 有以下场景需用到 1.实现从Stepingstone中执行部分指令后,需跳转到SDRAM中执行,前提是必须先将NAND FLASH中代码copy到SDRAM,然后才能跳转到SDRAM去执行。跳转到SDRAM 需使用LDR伪指令LDR PC,=SDRAM 来实现 分析: b指令是相对跳转指令,可以看到起反汇编代码是完全一样的,它依赖于当前PC寄存器的值,不管此代码链接地址如何,b指令都可以跳转到正确位置,这类指令称为位置无关指令 ldr pc,=labr 伪指令,从反汇编代码可以看出,是从内存的某个位置读出数据,并赋给pc寄存器,其中存放的值依赖于链接脚本文件的
[单片机]
ARM平台上实现Linux PPP拨号
硬件平台:亿道Liod平台(基于PXA270) 操作系统:嵌入式Linux 下面主要介绍一下如何在Liod平台上进行ppp拨号,实现GPRS上网. 第一步:如果内核不支持ppp拨号,则要重新编译内核,添加对ppp的支持, * PPP (point-to-point protocol) support PPP multilink support (EXPERIMENTAL) * PPP support for async serial ports * PPP support f
[单片机]
一种多功能录扩音系统的设计方案
0 引言 电力企业安全第一。电力工作中包括调度预令、操作指令、操作步骤、操作汇报、情况汇报等都需要进行电话录音,录音记录能更好地督促相关人员严格遵守安全步骤和劳动纪律,极大地促进了电力安全生产。目前,福建、浙江地区相继开展了电力系统准军事化工作,对电力生产的正规性和安全起到了很好的促进作用。与此同时,检修工作中操作步骤、工作内容、安全措施、分工等都提出了录音要求,但是,传统的录音机、录音笔等因为功能、容量、便利性等不便于工作中的使用。 1 录扩音系统结构 多功能录扩音系统,它主要包括ARM数据处理模块、录音系统、扩音系统。该系统功能适用、便携、操作简单。其中,录音系统用于记录电力检修工作中工作前的工作内容、危险点、安全措施及分工安
[单片机]
一种多功能录扩音系统的设计方案
Tiny4412友善之臂ARM开发板静态IP设置(重启有效)
刚入手Tiny4412开发板,发现它的ip地址不是192.168.1.230,老是自动跳变,今天是192.168.1.7,明天开机就变成了192.168.1.8,所以就决定将其设为静态ip地址:192.168.1.240。 首先参考网上提供的一个常见的方案: 要修改arm开发板的IP,如果是yaffs2文件,可以 1、首先要修改/etc/init.d/rcS文件,在/sbin/ifconfig lo 127.0.0.0 下添加一行/sbin/ifconfig eth0 192.168.1.20 up 注:192.168.1.20 只是举例,可以改成你想要修改的IP地址 本来这样修改之后就可以的,但是我发现仍然不行,使用ifco
[单片机]
Tiny4412友善之臂<font color='red'>ARM</font>开发板静态IP设置(重启有效)
DSP与DSP功能的ARM
  最近在工控领域里的一个项目,看到前期的工程设计人员设计了 Cortex-M3 微处理器 与TI DSP 的搭档来完成整个项目。“为什么不使用 Cortex-M4 的内核?”这个疑问就立刻蹦了出来。今天仔细查询了一下,做个简单的对比,供广大的网友们参考。   上面只是简单提到了几点。3倍于 DSP 的主频频率使得 STM32F407 在一定程序上弥补了在处理浮点运算的不足,而较便宜的价格,不仅使得项目的总成本大幅节省,也便得有 ARM 开发基础的工程师们更容易操控 DSP 的算法。   毕竟是工业控制领域的应用, Cortex-M4 还能充分发挥其过程控制的优势,丰富的IO引脚及兼容的5v TTL电平与外围器件的连接简
[嵌入式]
DSP与DSP功能的<font color='red'>ARM</font>
Windows 7会支持ARM处理器吗?
日前有谣言说有微软工程师在华盛顿Redmond演示了在ARM内核的芯片上运行的Windows XP操作系统。 官方上来说,大的Windows系统是不能在ARM处理器内核上运行的,而这也让英特尔的Atom处理器在上网本市场上相比ARM内核的处理器有了明显的优势。ARM和他的半导体合作伙伴想要进入上网本的话显然只能在他们基于ARM的处理器和SoC上运行Linux操作系统。 但现在,ARM公司主席和CEO Warren East暗示微软Windows和ARM之间有所联系,不过他当然不会做任何评论。 当然,目前上网本的设计工作是瞄准2010到2011年的市场的,到那时Windows、Linux和Android
[嵌入式]
ArmArm中国与华为海思最新“声明”:不会断供华为海思!
Arm是一家成立于1990年的英国芯片架构公司,2016年被孙正义的软银收购,但总部依然在英国剑桥。有报道说,Arm本身并不制造计算机芯片,其主要的业务是对外授权其半导体技术,把技术和工具打包售卖,买到的企业可以使用Arm技术进行设计。而这个技术,也就是芯片界鼎鼎大名的Arm架构。 据公开数据表明,中国区合作伙伴搭载了Arm IP的芯片出货量在过去10年内增长了超过170倍。 中国市场不仅非常庞大,也有其独特性并与世界其他地区有极大差别。为了让Arm技术惠及更多中国本土企业,Arm公司迫切需要一个中国的合作伙伴来开发可在中国市场获得本地许可的Arm兼容技术。同时,中国企业也更倾向于购买由中国公司全面开发的技术,因此通过Arm中
[嵌入式]
<font color='red'>Arm</font>、<font color='red'>Arm</font>中国与华为海思最新“声明”:不会断供华为海思!
快速学Arm(20)--中断向量控制器VIC[2]
上面是一个用来介绍VIC及各种寄存器关系的图,因为博客里不能放太大的图,我只能将其缩小得几乎无法看见内容的大小了. 曾经有领导劝我心态要平和,不能以加班来证明工作的好坏,我真的虚心接受.其实我也不喜欢加班,只是太忙不得已而已.某事在人,成事在天,自己尽了力,就不用去管成与不成了,总觉得这不是我的作为.但也没有办法,古人说的话总是有几分道理的. 上面的图是针对lpc213x或者lpc214x而言的,看了一下lpc2400的英文文档,有些寄存器好像有些不一样.也就是说我下面写的寄存器的数量可能与我前一篇讲的不完全一致,我想细节不影响道理.我尽可能使用lpc2400的文档来学习,因为我手里的开发板就是这样型号的. 我们前面
[单片机]
快速学<font color='red'>Arm</font>(20)--中断向量控制器VIC[2]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved