历史上的今天
返回首页

历史上的今天

今天是:2025年01月02日(星期四)

正在发生

2020年01月02日 | ARM汇编程序设计之--数据搬移

2020-01-02 来源:eefocus

原来只知道一个MOV指令,却不知道还有个MOVS,在书上查找了只有MOV传送指令,


num EQU 20;定义一个常量num,值为20

 

;---------------------------------------------------------------------------------------------------

;AREA分析如下:

 

;语法格式:

;AREA   段名  属性1,属性2,。。。

 

;AREA伪指令用于定义一个代码段或数据段。其中段名若以数字开头,则该段名需用"|"

;括起来,如|1_test|;属性字段表示该代码段(或数据段) 的相关属性,多个属性用逗号分开常用

;属性如下:

 

;CODE属性:用于定义代码段,默认为READONLY

 

;DATA属性:用于定义数据段,默认为READWRITE

 

;READONLY属性:指定本段为只读,代码段默认为READONLY

 

;READWRITE属性:指定本段为可读可写,数据段的默认属性为READWRITE

 

;ALIGN属性:使用方式为ALIGN表达式。

 

;COMMON属性:该属性定义一个通用的段,不包含任何的用户代码和数据。各源文件中同名的COMMON段共享

;同一段存储单元

;---------------------------------------------------------------------------------------------------

 

 

    AREA    EXAMPLE2,CODE,READONLY  ;声明一个代码段,名为EXAMPLE2

    ENTRY   ;指定程序入口点

    ;-----------------------------------------------------------------------------------------------  

    ;ENTRY:一个完整的汇编程序中至少要有一个ENTRY,也可以有多个。当有多个ENTRY时,程序的真正入口点由

    ;连接器指定,但在一个源文件里最多只能有一个ENTRY,也可以没有。

    ;-----------------------------------------------------------------------------------------------

Start

    LDR     r0, =src            ;/*  r0 = pointer to source block 指向源操作数的首地址*/

    LDR     r1, =dst            ;/*  r1 = pointer to destination block 指向目的操作数的首地址*/

    MOV     r2, #num            ;/*  r2 = number of words to copy 要拷贝大小*/

    MOV     sp, #0x400          ;/*  set up stack pointer (r13) 确定堆栈地址*/

     

blockcopy

    MOVS    r3,r2, LSR #3       ;/*  number of eight word multiples */

    BEQ     copywords           ;/*  less than eight words to move ? */

    STMFD   sp!, {r4-r11}       ;/*  save some working registers */

octcopy

    LDMIA   r0!, {r4-r11}       ;/*  load 8 words from the source */

    STMIA   r1!, {r4-r11}       ;/*  and put them at the destination */

    SUBS    r3, r3, #1          ;/*  decrement the counter */

    BNE     octcopy             ;/*  ... copy more */

    LDMFD   sp!, {r4-r11}       ;/*  don't need these now - restore originals */

copywords

    ANDS    r2, r2, #7          ;/*  number of odd words to copy */

    BEQ     stop                ;/*  No words left to copy ? */

wordcopy

    LDR     r3, [r0], #4        ;/*  a word from the source */

    STR     r3, [r1], #4        ;/*  store a word to the destination */

    SUBS    r2, r2, #1          ;/*  decrement the counter */

    BNE     wordcopy            ;/*  ... copy more */

stop

    B       stop                ;/*在此进入死循环*/

 

    AREA    blockdata,DATA,READWRITE    ;声明一个数据段,名为blockdata

     

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

 


今天到这算是搞定这个程序了,算是完全弄懂了他是怎么执行的了,不容易啊!


还有一个要特别说明的寄存器操作方式:


多寄存器装载与存储:


用一条指令把存储器里的数据装载到多个寄存器,或者把多个寄存器里的数据存储到存储器,这类指令就是多寄存器装载与存储指令,他们特别适合两种情况:堆栈操作和数据块传输。


在这两种情况下,使用多寄存器传送指令比使用单寄存器传送指令效率要高很多。


实现方式和分类:


STMIA/LDMIA     IA(Increment After)表示在数据传送后,基址寄存器的值递增。


STMIB/LDMIB  IB(Increment Before) 表示在数据传送前,基址寄存器的值递增


STMDA/LDMDA  DA(Decrement After)表示在数据传送后,基址寄存器的值递减


STMDB/LDMDB  DB(Decrement Before)表示在数据传送前,基址寄存器的值递减


推荐阅读

史海拾趣

High Voltage Semiconductor Inc公司的发展小趣事

进入21世纪,美高测持续加大在技术研发上的投入,成功研发出具有自主知识产权的VLF(超低频)测试技术,并应用于变电站设备、中高压电力电缆等关键领域的测试。这项技术不仅提高了测试的准确性和效率,还降低了操作风险,迅速获得了市场的广泛认可。公司借此机会,在全球范围内建立了多个销售和服务中心,进一步巩固了其在高压半导体测试市场的领先地位。

Cobham Semiconductor Solutions公司的发展小趣事

品质是Cobham Semiconductor Solutions的生命线。公司始终坚持严格的质量管理体系,从原材料采购到生产流程,再到产品出厂,每一个环节都经过严格把控。公司还引入了先进的生产设备和技术,确保产品质量的稳定性和可靠性。这种对品质的执着追求,使得Cobham的产品在市场上赢得了良好的声誉和口碑。

Comchip Technology公司的发展小趣事

Comchip Technology公司于2000年在新北市莺歌区创立,创始人凭借对半导体技术的深刻理解和前瞻眼光,决定专注于二极管制造技术的研发与创新。在创立初期,公司面临资金紧张、市场竞争激烈等挑战,但凭借卓越的技术实力和坚定的信念,成功开发出了一系列高质量的二极管产品,逐渐在市场中站稳脚跟。

ANYSOLAR LTD.公司的发展小趣事

近年来,随着全球能源结构的调整和光伏产业的快速发展,市场竞争日益激烈。ANYSOLAR也面临着来自同行的竞争压力和成本上升的挑战。为了应对这些变革和危机,ANYSOLAR积极调整战略,优化生产流程,降低成本。

同时,公司还加大了对新兴市场的开拓力度,通过参加国际展会、建立海外销售渠道等方式,拓展新的业务增长点。这些措施有效缓解了公司的经营压力,为公司的持续发展注入了新的活力。

Axon' Cable公司的发展小趣事

为了进一步扩大市场份额和提升竞争力,Axon' Cable公司开始实施全球化战略。公司在全球范围内设立了多个生产基地和研发中心,积极开拓国际市场。同时,Axon' Cable还加强了与国际知名企业的合作,共同推动技术创新和产业升级。这些举措使得Axon' Cable的产品在全球范围内得到了广泛应用,公司的国际影响力也逐步提升。

ECLIPSE公司的发展小趣事

2001年,IBM公司决定推动一个开源项目,旨在打造一个全新的集成开发环境。这个项目名为Eclipse,旨在通过开放源代码的方式,吸引全球开发者共同参与。Eclipse的初始版本发布后,凭借其优秀的性能和友好的界面,迅速在开发者社区中引起了关注。

问答坊 | AI 解惑

求助 关于反应速度测试仪的设计 (MCS-51单片机)

希望高手们帮帮忙先谢谢了!要求如下: 1  能够完成一个人反应速度的测试工作,并将结果显示在LED数字显示屏上。 2  程序开始时亮黄灯进入准备状态,被测试者按一次按钮则黄灯灭,开始进行测试。 3  每一个测试完成 ...…

查看全部问答>

发现同一个贴子里多个附件下载的问题

最近在论坛里发现很多帖子的资源包含多个附件,而这些附件都是一个文件分成多个的,下载时会连续扣调芯币,这样的话论坛中大部分人几乎无法负担。 这种情况,建议论坛能不能改一下,在一个帖子里的附件下载只扣一次芯币,其他附件就不用扣了。…

查看全部问答>

大赛B题 声源自制

本帖最后由 paulhyde 于 2014-9-15 09:42 编辑 我原来写过几个简单的小程序 有双音多频 单音多频的 大家可以下载看看 这几个程序使用的是PIC16F54 都是可以直接使用的 大家只要将HEX文件烧录就可以用了  …

查看全部问答>

关于步进电机控制

各位高手:这是两相电机,怎么接线呢?   我接的线不知道是不是不对,还是程序有问题,在软件防真时可以,但是下载到板上时电机就老是抖动,没按照我设计的转一圈转。   我是:2跟5并接12V,然后P0.0接3  P0.1接1  P0.2接4 ...…

查看全部问答>

ISE文件类型说明

在使用ISE进行设计的过程中,会在你的工程目录中生成好多类型的文件,这些文件是什么文件呢?通过自己和网上朋友的经验对ISE的文件类型做一下小小总结: ISE文件类型说明 *.bit  下载配置文件。*.bld  报告文件。*.edn  网表文 ...…

查看全部问答>

请问哪里有无线协议的详细文档下载?

刚学GPRS开发,想找些无线通讯协议看看,google了一下,没找到,所以想请教一下,哪里有这一类的完整文档下载,谢谢!…

查看全部问答>

电感

电感电感在电路中常用“L”加数字表示,如:L6表示编号为6的电感。电感线圈是将绝缘的导线在绝缘的骨架上绕一定的圈数制成。直流可通过线圈,直流电阻就是导线本身的电阻,压降很小;当交流信号通过线圈时,线圈两端将会产生自感电动势,自感电动势 ...…

查看全部问答>

5天学会Protel99SE图文教程下载

虽然这个是老古董了,因为看到,还有朋友再使用和学习protel 99,这份资料不错,相信能给初学者带来帮助。 …

查看全部问答>

《单片机与计算机串口通信实践》

串口通信的第一种实现方案:半双工通信方式;这适用于:下位机需要等待上位机的回复之后,方可继续发送下一个数据包的应用场合。在大多数的串口书籍中,串口通信的具体实现均是采用的该方案;但功能太简化、代码不细致。在本书中,全面考虑了菜单 ...…

查看全部问答>

关于nokia5110显示屏的参数设定

本帖最后由 jameswangsynnex 于 2015-3-3 19:56 编辑 刚刚做了下实验,看看调整供电电压对nokia5110液晶显示屏的影响 这个显示屏由于比较便宜,又是点阵的,所以用的比较多,我虽然老早就用了,但是一直有点疑问放在心上,就是其参数设定问题 1 ...…

查看全部问答>