关于ARM汇编里的特殊符号

发布者:数字狂舞最新更新时间:2016-07-20 来源: eefocus关键字:ARM汇编里  特殊符号 手机看文章 扫描二维码
随时随地手机看文章
先前企图全部靠自己写一个bootloader,结果尝试了下,花了4天时间查各种技术资料,写了个startup.s文件出来,写的过程中才发现,原来还有很多问题是我基本上不知道的,比如说如何进行ARM的位操作、如何将堆栈设置到RAM中、UART的波特率计算方法等问题。

在边写边查资料的过程中,我又发现了别人的一些程序我看不懂。。。因为除了EQU、DCD等我基本不用伪指令。。。

所以我开始看44B0 BootLoader的范例程序,可能是人家水平实在比较高,也可能是俺的水平确实有限,总之是有些地方看不怎么懂,特别是一些个特殊符号,现特将那些个麻烦的符号总结下:

特殊符号        |         对应指令              |          含义                   |       示例

-------------------|---------------------------------|----------------------------------|---------------------------------------

^                |        MAP                     |      定义结构化内存表    | MAP 4096;内存表首地

                    |                                  |                                   | 址为4096

-------------------|---------------------------------|----------------------------------|---------------------------------------

#                  |       FIELD                   |       定义内存表中的数   | MAP 4096

                    |                                  |       据,结合MAP指令    | STACKSVC FIELD     256;

                    |                                  |       使用。                  | 定义从4096开始的256字节

                   |                                 |                                  |为SVC的堆栈空间。

-------------------|---------------------------------|----------------------------------|---------------------------------------

%                |        SPACE                 |      分配一块内存,并     | DataStruc SPACE 280

                   |                                 |     用“0”初始化             | 分配280字节内存并初始化

-------------------|---------------------------------|----------------------------------|---------------------------------------

[|]               |     IF ELSE ENDIF        |     条件编译,有选择的   | IF 逻辑表达式

                   |                                  | 确定需要编译的代码      |       指令或伪指令

                    |                                 |     IF,ELSE,ENDIF        |   ELSE

                   |                                 |      可以嵌套使用           |       指令或伪指令

                   |                                 |                                  |   ENDIF

-------------------|---------------------------------|----------------------------------|---------------------------------------

另外还有符号: $

如果在串变量前有一个$则在汇编时编译器将用该串变量的数值取代该串变量,如:

GBLS    STR1

GBLS    STR2

STR1    SETS      “pen.”

STR2    SETS      “This is a $STR1"

编译后的结果是STR2的值为This is a pen.

如果$后是数字变量(与串变量区分),在汇编时编译器将该数字变量的数值转换成十六进制的串,然后用该十六进制的串取代$后的数字变量。

如果$后是逻辑变量,在汇编时编译器将该逻辑变量替换成它的取值(T或者F)。

如果程序中需要$,则用$$来表示,编译器将不进行变量替换。

                    GBLS   STR1

                    GBLS   B

                     GBLA   NUM1

NUM1            SETA   14

B                   SETS   “CHANGED”

STR1             SETS    “abc$$B$NUM1”

编译结果STR1的值为:abcB0000000E。

注意:在两个竖线“|”之间的$并不表示进行变量替换,但如果“|”是在双引号内,则将进行变量替换。

使用点"."来表示变量名的结束。

           GBLS    STR1

           GBLS    STR2

STR1    SETS      “AAA”

STR2    SETS      “bbb$STR1.CCC"

编译结果STR2值为bbbAAACCC

还有一个例外:“%”

“%”除了表示SPACE外还可以在局部标号中使用,具体意思见伪指令ROUT的使用示例:

◆ROUT

ROUT伪指令定义局部标好的有效范围

伪指令格式如下

{name} ROUT

其中 name 所定义的作用范围的名称

当没有使用ROUT伪指令时,局部标号的作用范围所在段ROUT伪令的作用范

围在本ROUT伪指令和下一个ROUT伪指令之间(指同一段中的ROUT伪指令)

伪指令应用举例如下:

    routineA ROUT                         ;定义局部标号的有效范围,名称为routineA

                  ......

    3routineA                                ;routineA范围内的局部标号3

                ......

                 BEQ   %4routineA       ;若条件成立,跳转到routineA范围内的局部标号 4

                 ......

                 BEQ   %3routineA       ;若条件成立,跳转到routineA范Iq内的局部标号 3

                 ......

    4routineA                                ;routineA范围内的局部标号4

                  ......

    otherstuff ROUT                      ;定义新的局部标号的有效范围

关键字:ARM汇编里  特殊符号 引用地址:关于ARM汇编里的特殊符号

上一篇:FS2410 开发板上启用 MMU 实现虚拟内存管理
下一篇:ldr和adr在使用标号表达式作为操作数的区别

小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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