马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
下面列举了几个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 /文件的结束标志/ 凌阳教育,专注嵌入式人才培养多年,完善的培养方案,强大的师资,合理的课程安排,成功从小白蜕变为嵌入式工程师。想了解凌阳教育,或者获得更多嵌入式学习资料的免费下载,请点击www.sunplusedu.com访问凌阳教育官网 |