《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 解决方案 > ARM汇编程序实例

ARM汇编程序实例

2017-06-22
关键词: 汇编语言

下面列举了几个ARM汇编程序的简单实例,给出了详细的说明;分别给出了完成同一功能的程序在ADS编译环境和GNU编译环境下的不同形式,并在最后列出了由ADS环境向GNU环境下转变时所需要的替换。请注意它们的不同之处。

示例 简单的ARM指令程序。

在ADS编译环境下,程序如下:

AREA     ARMex,CODE,READONLY;设置本段程序的名称及属性,代码段的名称为ARMex

ENTRY                                             ;标记要执行的第一条指令

Start              MOV      R0,#10                  ;设置参数

              MOV      R1,R3                  

              ADD       R0,R0,R1              ;R0=R0+R1

Stop        MOV      R0,#&18               ;软中断参数设置

              LDR       R1,=&20026       ;软中断参数设置

              SWI        0x123456              ;将CPU的控制权交给调试器

END                                                 ;文件的结束标志

行1:AREA指示符定义本程序段为代码段,名字是ARMex,属性为只读。通常一个汇编程序可包括多个段,如代码段、可读/写的数据段等。代码段中也可定义数据。该行中的信息将供链接器使用。

行2:ENTRY指示符标记程序中被执行的第一条指令,即标志入口地址。在一个ARM程序中可以有多个ENTRY,但至少要有一个ENTRY。

行3:start是一个标号,表示代码的开始,其值是一个地址。其后是ARM指令,利用MOV指令将立即数10赋给寄存器R0.

行4:利用MOV指令将立即数3赋给寄存器R1.

行5:计算R0=R0+R1.

行6~行8:这三条指令将系统控制权**给调试器,结束程序运行。此处是通过向Angel发送一个软中断实现的。Angel的软中断号是0x123456,实现该功能的中断参数是R0=0x18,R1=0x20026.

行9:END指示符指示汇编器结束对该源程序的处理,所以每个汇编程序都必须包含一个END行。

GNU编译环境下(基于Embest IDE环境开发环境),该程序如下:

.global_start

.text                                                  /*标志代码段*/

_start      MOV      R0,#10                  /*设置参数*/

              MOV      R1,#3                   

              ADD       R0,R0,R1              /*R0=R0+R1*/

.stop              MOV      R0,#0x18

              LDR       R1,=0x20026

              SWI        0x123456

.END                                                /*文件的结束标志*/


本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。