微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM基础:ARM 伪指令详解

ARM基础:ARM 伪指令详解

时间:11-20 来源:互联网 点击:

X和Y按位作逻辑与的操作。

X:OR:Y 表示将X和Y按位作逻辑或的操作。

:NOT:Y 表示将Y按位作逻辑非的操作。

X:EOR:Y 表示将X和Y按位作逻辑异或的操作。

2、 逻辑表达式及运算符

逻辑表达式一般由逻辑量、逻辑运算符和括号构成,其表达式的运算结果为真或假。与逻辑表达式相关的运算符如下:

— “=”、“>”、“<”、“>=”、“<= ”、“/=”、“ <>” 运算符

以X和Y表示两个逻辑表达式,以上的运算符代表的运算如下:

X = Y 表示X等于Y。

X > Y 表示X大于Y。

X < Y 表示X小于Y。

X >= Y 表示X大于等于Y。

X <= Y 表示X小于等于Y。

X /= Y 表示X不等于Y。

X <> Y 表示X不等于Y。

— “LAND”、“LOR”、“LNOT”及“LEOR”运算符

以X和Y表示两个逻辑表达式,以上的逻辑运算符代表的运算如下:

X:LAND:Y 表示将X和Y 作逻辑与的操作。

X:LOR:Y 表示将X和Y作逻辑或的操作。

:LNOT:Y 表示将Y作逻辑非的操作。

X:LEOR:Y 表示将X和Y作逻辑异或的操作。

3、 字符串表达式及运算符

字符串表达式一般由字符串常量、字符串变量、运算符和括号构成。编译器所支持的字符串最大长度为512字节。常用的与字符串表达式相关的运算符如下:

— LEN运算符

LEN运算符返回字符串的长度(字符数),以X表示字符串表达式,其语法格式如下:

:LEN:X

— CHR运算符

CHR运算符将0~255之间的整数转换为一个字符,以M表示某一个整数,其语法格式如下:

:CHR:M

— STR运算符

STR运算符将将一个数字表达式或逻辑表达式转换为一个字符串。对于数字表达式,STR运算符将其转换为一个以十六进制组成的字符串;对于逻辑表达式,STR运算符将其转换为字符串T或F,其语法格式如下:

:STR:X

其中,X为一个数字表达式或逻辑表达式。

— LEFT运算符

LEFT运算符返回某个字符串左端的一个子串,其语法格式如下:

X:LEFT:Y

其中:X为源字符串,Y为一个整数,表示要返回的字符个数。

— RIGHT运算符

与LEFT运算符相对应,RIGHT运算符返回某个字符串右端的一个子串,其语法格式如下:

X:RIGHT:Y

其中:X为源字符串,Y为一个整数,表示要返回的字符个数。

— CC运算符

CC运算符用于将两个字符串连接成一个字符串,其语法格式如下:

X:CC:Y

其中:X为源字符串1,Y为源字符串2,CC运算符将Y连接到X的后面。

4、 与寄存器和程序计数器(PC)相关的表达式及运算符

常用的与寄存器和程序计数器(PC)相关的表达式及运算符如下:

— BASE运算符

BASE运算符返回基于寄存器的表达式中寄存器的编号,其语法格式如下:

:BASE:X

其中,X为与寄存器相关的表达式。

— INDEX运算符

INDEX运算符返回基于寄存器的表达式中相对于其基址寄存器的偏移量,其语法格式如下:

:INDEX:X

其中,X为与寄存器相关的表达式。

5、 其他常用运算符

— ?运算符

?运算符返回某代码行所生成的可执行代码的长度,例如:

?X

返回定义符号X的代码行所生成的可执行代码的字节数。

— DEF运算符

DEF运算符判断是否定义某个符号,例如:

:DEF:X

如果符号X已经定义,则结果为真,否则为假。

4.3 汇编语言的程序结构
4.3.1 汇编语言的程序结构

在ARM(Thumb)汇编语言程序中,以程序段为单位组织代码。段是相对独立的指令或数据序列,具有特定的名称。段可以分为代码段和数据段,代码段的内容为执行代码,数据段存放代码运行时需要用到的数据。一个汇编程序至少应该有一个代码段,当程序较长时,可以分割为多个代码段和数据段,多个段在程序编译链接时最终形成一个可执行的映象文件。

可执行映象文件通常由以下几部分构成:

— 一个或多个代码段,代码段的属性为只读。

— 零个或多个包含初始化数据的数据段,数据段的属性为可读写。

— 零个或多个不包含初始化数据的数据段,数据段的属性为可读写。

链接器根据系统默认或用户设定的规则,将各个段安排在存储器中的相应位置。因此源程序中段之间的相对位置与可执行的映象文件中段的相对位置一般不会相同。

以下是一个汇编语言源程序的基本结构:

AREA Init,CODE,READONLY

ENTRY

Start

LDR R0,=0x3FF5000

LDR R1,0xFF

STR R1,[R0]

LDR R0,=0x3FF5008

LDR R1,0x01

STR R1,[R0]

┉┉

END

在汇编语言程序中,用AREA伪指令定义一个段,并说明所定义段的相关属性,本例定义一个名为Init的代码段,属性为只读。ENTRY伪指令标识程序的入口点,接下来为指令序列,程序的末尾为END伪指令,该伪指令告诉编译器源文件的结束,每一个汇编程序段都必须有一条END伪指

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top