ARM汇编编程基础之四-ARM汇编伪操作

发布者:rockstar6最新更新时间:2015-09-23 来源: eefocus关键字:ARM  汇编编程  伪操作 手机看文章 扫描二维码
随时随地手机看文章
掌握了基本的ARM汇编指令后,要写出简单的ARM汇编程序,还必须要掌握基本的ARM汇编伪操作(directive)。现在我们来看一个简单的汇编程序,该程序调用子程序完成了加法操作。

1 ;文件名:TEST.S
2 ;功能:实现两个寄存器相加
         AREA Example,CODE,READONLY ;声明代码段Example
         ENTRY ;标识程序入口
         CODE32 ;声明32位ARM指令
 START  MOV R0,#0 ;设置参数
         MOV R1,#10
 LOOP BL ADD_SUB ;调用子程序ADD_SUB
         B LOOP ;跳转到LOOP
10 ADD_SUB
11         ADD R0,R0,R1 ;R0 = R0 + R1
12         MOV PC,LR ;子程序返回
13         END ;文件结束

第6、7行将传递给子程序的参数存放在r0和r1中,第8行调用子程序。第11、12行是子程序的代码,完成了2个参数相加,并将结果放在r0后返回主程序。第6、8、10行的START、LOOP、ADD_SUB是标号,最经常用于跳转指令B和BL,由于汇编语法要求的缘故,标号必须顶格写(即:不能在行首有空格),否则编译器会报错。与之对应的是,汇编指令一定不能顶格写。

很明显分号(;)在汇编程序中是注释符号,相当于C语言的//号。除此之外,当然大家注意到了第3、4、5、13行是我们没学习过的符号,其实它们就是本文的重点——ARM汇编伪操作。首先我先来解释这几个伪操作,第3行定义了一个代码段,其段名为Example,属性为只读,从而表示第6——12行是程序代码(而不是程序数据)。第4行表示整个程序的入口点(即:程序运行的第一条指令)是第6行的MOV指令(注1)。第5行表示第6——12行的程序代码是ARM指令,而不是thumb指令。第13行表示源代码文件结束,其背后的含义就是:如果程序员在第13行后还写有汇编指令,编译器也根本不会理会这些代码,更不会去编译它们,当然这些代码也就不可能出现在最后的可执行文件中。哈哈,所以请务必记住,在END伪操作的后面再写代码,那是无用功,写了也白写。不要不以为然哟,根据经验,初学者总是会犯这样的错误。

特别说明:第9行的含义是要让程序在运行结束后,在第9行进行死循环,从而让整个程序定格在第9行。这一点也许你很困惑:在写应用程序时,程序结束就结束了,源代码根本不需要再去写个死循环。但你现在要弄清楚:你写应用程序时,有OS为你处理程序结束后的若干事情。可是,你现在已经得不到OS服务。如果你不自己写第9行的代码,那么当你认为程序已经运行结束(第8行执行完成)的时候,CPU不会聪明地停下来,它会继续任劳任怨地去取指第11行,继续运行,这不是你所希望的。其实这还不是最糟糕的,最糟糕的是,如果你的程序没有11-13行,那么CPU任劳任怨取出的指令其实是内存中的随机数,但CPU却会把它当作指令来执行,那么,你认为此时会出现什么情况呢?哈哈,只有天知道。

当然,伪操作远不止这几条,下面我们再来介绍经常使用的若干伪操作。

GBLA:定义全局算术变量(准确说,应该是全局符号),例如:GBLA testval

SETA:对全局算术符号进行赋值,例如:testval    SETA    9;testval SETA testval + 1

DCD:在编译时为整数分配字存储空间,例如:DCD 0x123456ab,这条伪操作将导致编译器在最终的二进制可执行文件中分配一个字的空间,并在该空间中存放整数0x123456ab

DCB:在编译时为整数分配字节存储空间,例如:DCB ‘a’,这条伪操作将导致编译器在最终的二进制可执行文件中分配一个字节的空间,并在该空间中存放字符a的ASCII码

IF,ELSE及ENDIF:相当于C语言的条件编译,例如:

    GBLA testval
testval    SETA 9
    IF testval < 5
      mov r0, #testval
    ELSE
      mov r1, #testval
    ENDIF
    IF :DEF:testval
      mov r2, #testval
    ELSE
      INFO 4, "you should define testval"
    ENDIF

编译器编译该段代码的结果是:

mov r1, #9

mov r2, #9

WHILE及WEND :例如

    GBLA testval   
testval SETA 1
    WHILE testval <= 3
testval SETA testval + 1
    mov r0, #testval
    WEND

编译器编译该段代码的结果是:

mov r0, #2

mov r0, #3

mov r0, #4

MACRO 、MEND及MEXIT:相当于C语言的宏替换,例如:

    MACRO
$label xmac $p1,$p2
; code1
$label.loop1
;code2
    BGE $label.loop1
$label.loop2
;code3
    BL $p1
    BGT $label.loop2
; code4
    ADR r0, $p2
;code5
    MEND
;主程序
abc xmac subr1,de

编译器编译该段代码的结果是:

;code1
abc.loop1
;code2
    BGE abc.loop1
abc.loop2
;code3
    BL subr1
    BGT abc.loop2
;code4
    ADR r0, de
;code5

EQU:相当于C语言的宏定义,例如:testval EQU 4

EXPORT: 见“ATPCS与混合编程”一文

IMPORT:见“ATPCS与混合编程”一文

非常重要的一点是:必须深刻理解汇编伪操作是给编译器提供某些必要的信息,以帮助编译器正确完成程序的编译。当编译完成后,汇编伪操作就完成了它的历史使命,它不可能在最终的可执行程序的二进制代码中留下哪怕是一点点痕迹,当然也就不可能在程序运行时受到CPU的“青睐”。总之记住一句话,汇编伪操作是给编译器看的,而不是给CPU看的。这是汇编伪操作与汇编指令最大的区别。[page]

为了保持内容的完整,下面给出较为完整的汇编伪操作列表。如需完整的列表,请自行查阅ads自带的“Online Books”相关章节。

符号定义(Symbol Definition)伪操作:

image

数据定义(Data Definition)伪操作:

image

汇编控制(Assembly Control)伪操作:

image

信息报告(Reporting)伪操作:

image

其他(Miscellaneous)伪操作:

image

注1:ENTRY的本意并非如此,此处的含义仅是ENTRY的副作用而以。关于其本意,后续文章将予以解释。

关键字:ARM  汇编编程  伪操作 引用地址:ARM汇编编程基础之四-ARM汇编伪操作

上一篇:ARM汇编编程基础之三-基本寻址方式与基本指令
下一篇:ARM汇编编程基础之五-ADS开发环境的使用

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

基于ARM的智能电子提花机控制系统设计
   引 言   提花就是在织物的织造过程中对经线的升降加以控制,使其具有凹凸不平的立体感。随着电子技术的发展,纺织提花技术由最初的机械选针方式发展到现在的电磁选针方式。电子提花与机械提花相比,结构较为简单,花型控制更为灵活可靠。电子提花又有基于工控机和基于嵌入式单片机两种方案,后者比前者在可靠性、成本等方面更具有优势。   1 电子提花机嵌入式控制系统硬件设计   设计方案中,本文采用了核心板+底板的方式。在不修改核心板电路图的情况下,只要改变底板的功能单元,就可以方便得对系统的外围接口进行扩展。有利于二次开发,核心板框和底板框图如图1、2所示。         核心板上集成Samsung S3C2410
[单片机]
基于<font color='red'>ARM</font>的智能电子提花机控制系统设计
ARM发布下一代DDR存储解决方案提高芯片性能表现
全新灵活的、基于标准的 DDR存储解决方案缩短上市时间并优化芯片性能和尺寸 ARM 公司今天宣布扩展了其 Artisan 物理 IP系列产品中的 Velocity DDR 存储接口产品,以支持众多特定应用对 SDRAM的要求。扩展后的 ARM Velocity DDR产品和DDR、DDR2、Mobile DDR、GDDR3 SDRAM的JEDEC标准相兼容,并支持领先代工厂的130纳米、110纳米、90纳米和65纳米的标准CMOS工艺。 ARM Velocity 系列产品针对数据传输速度最高达 800Mbps 的主流个人电脑和服务器中的应用。 Vel
[新品]
全新的 Arm 全面计算解决方案实现基于Arm 技术的移动未来
新闻重点: • 新的第五代 GPU 架构为基于Arm GPU(包括最新的Arm Immortalis-G720)的未来几代视觉计算奠定坚实基础 • 最高性能的 Armv9 Cortex 计算集群连续三年实现两位数的性能提升 • Arm 2023 全面计算解决方案是高端移动计算的平台,将驱动沉浸式游戏、实时 3D 体验和下一代人工智能应用 Arm® 今日宣布推出 2023 全面计算解决方案(TCS23),该解决方案将成为最重要的移动计算平台,为智能手机带来绝佳的解决方案。 TCS23 提供一整套针对特定工作负载而设计与优化的最新 IP,可作为一个完整系统无缝地协同工作,从而满足日益增长的移动用户体验需求。 T
[嵌入式]
全新的 <font color='red'>Arm</font> 全面计算解决方案实现基于<font color='red'>Arm</font> 技术的移动未来
基于ARM控制器的渗炭炉温度控制系统的设计
渗碳过程工件质量主要取决于对温度的控制,当今市场中温度控制成型的产品均以单片机为控制器。由于一般单片机的速度比较慢,更重要的是其ROM和RAM空间比较小,不能运行较大程序,而基于多任务的操作系统需要的任务堆栈很多,需要的RAM空间很大,故其在发展上受到了很大限制。其欢在开发环境上,DSP需要开发用的仿真器,其价格比较贵,因此本设计排除了使用DSP。ARM系列的ARM7TDM1核嵌入式处理器目前应用得较多,价格比较低,性价比较好,还有免费的开发工具ARM SDT,再配以简单的JTAG仿真器,就可以运行嵌入式开发,因此本设计选用韩国三星公司的S3C44BOX芯片作为主控制器。 1 Samsung S3C4480X芯片简介 Samsu
[应用]
ARM时钟管理单元--CMU
时钟的原理 时钟管理单元是cortex-A9中用来管理各个时钟模块的核心单元,4412的时钟通过PLLS(锁相环)产生cpu总线外设所需要的各种频率的时钟信号 时钟是协调整个系统的频率, 所以为了整个系统ARM功耗最低,性能最好,采用多时钟频率的方法 我们这里使用的时钟是一个25HZ的晶振,通过倍频和分频来改变各个模块的频率 同样的我们可以通过手册的推荐值去配一个时钟的P,M,S,下面是一个AOLL_CON0 的 这个是时钟的关系图,我们可以看到,他就是通过一个晶振产生频率,之后通过FIN PLL的放大到各个模块去,这里就不赘述了
[单片机]
<font color='red'>ARM</font>时钟管理单元--CMU
AD转换汇编程序实例
AD转换程序实例 ;此程序是一个简单的AD转换演示例程,作0-5V电压测试 ;转换结果从C口输出 非常直观 ;转换的值ADRESH在0V是0发光管全灭, 5V时全亮 ;============================================== include p16f73.inc ORG 0X00 NOP START BCF STATUS,RP0 CLRF PORTC MOVLW B'01000001'  ;D7 D6=01 AD转换时钟频率= FOSC/8 MOVWF ADCON0  ;D5 D4 D3=000 AD转换模拟通道选择RA0/AN0       ;
[单片机]
ARM知识--《ARM与Linux些许问题》第一章:ARM工作模式
===================================================== 早期的ARM核有状态(ARM或Thumb)切换(通过BX等指令修改CPSR寄存器(当前程序状态寄存器,存放条件码标志,中断禁止位,当前处理器模式以及其他状态和控制信息)中T的控制位完成程序状态的切换),现在ARM都只使用Thumb状态了。所以,我们不在讨论状态切换相关。 一、ARM七种工作模式及其应用场合(Linux操作系统使用了其中USR和SVC模式、出现异常时还可能通过进入其他模式转为Linux内核态) 在CPSR寄存器中设置M 位,分别对应如下七种模式(注意:用户模式和系统模式只有对CPSR的读权限,因
[单片机]
ZiLOG进军32位ARM-9 MCU市场,瞄准安全和POS等应用
ZiLOG公司日前宣布进军32位ARM-9 MCU市场。该公司充分借助其现有的技术知识,加上专注于特定应用市场的策略,以赢取安全和销售点(POS)应用领域的增长机会。这一领域的产品开发已有时日,并已获得成功。 ZiLOG进军32位领域并不是说进入了通用ARM-7市场。相反,它是指该公司扩展了其专用产品战略。在这种情况下,该公司将继续开发更先进、处理能力更强和更具集成性的核心产品系列——这些都奠基于ZiLOG现有在某些应用领域的领导地位、专门技术以及在这些赢得客户信赖的领域所累计的知识。 根据Nilson于2005年11月公布的数字,2004年,微控制器的全球POS市场规模为880万单位,且每年以18.1%的速度增长。目标应用包
[焦点新闻]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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