汇编语言的查办格局如下:
{symbol}{instruction/directive/pseud0-instruction}{;comment}
symbol:标号/部分标号/常量/变量
instruction:指令
directive:伪操作
pseudo-instruction:伪指令
comment:注释
{}中括号内是可选
留意:
1.symbol有必要顶格书写。(ARM汇编这以后不加“:”)(GUN汇编要加“:”)
2.symbol命名规矩:由字母,数字,下划线组成;除部分标号外,不能以数字最初。
3.指令不能顶格书写。
4.ARM指令,伪指令,伪操作,寄存器名能够悉数为大写字母,也可悉数为小写字母;不行巨细写混用。
5.假如查办太长,能够将一条查办分几行来书写,内行末用“”一共换行(即下一行与本行为同一查办)。“”后不能有任何字符,包括空格和制表符(Tab)。
ARM汇编语言中的符号
symbol(标号)
实质:代表一个地址值。段内标号的地址值在汇编时确认;段外标号的地址值在衔接时确认。
分类:3类(分类根据了 标号的生成方法)
symbol(部分标号)
部分标号主要在部分规模内运用。它由两部组成:最初是一个0-99直接的数字,后边紧接一个一般一共该部分变量效果规模的符号。
部分变量的效果规模一般为当时段,也能够用ROUT来界说部分变量的效果规模。
部分变量界说的语法格局:N{routname}
N:为0~99之间的数字。
routname:当时部分规模的称号(为符号),一般为该变量效果规模的称号(用ROUT伪操作界说的)。
部分变量引证的语法格局:%{F|B}{A|T}N{routname}
%:一共引证操作
N:为部分变量的数字号。
routname 为当时效果规模的称号(用ROUT伪操作界说的)
%:一共引证操作
F:指示编译器只向前查找
B:指示编译器只向后查找
A:指示编译器查找宏的一切嵌套层次
T:指示编译器查找宏的当时层次
留意:1.假如F和B都没有指定,编译器先向前查找,再向后查找
symbol(常量)
留意:1.汇编器对-n和2^32-1不做差异;汇编时对联系运算符选用无符号数方法处理,这就意味着当0>-1是
symbol(变量)
留意:汇编时变量的替换
一般情况下,包括在两个竖线(|)之间的$并不一共进行变量替换。可是假如竖线(|)是在双引号内,则将进行变量替换。
ARM汇编语言中的表达式
表达式是由符号、数值、单目或多目操作符以及括号组成的。
1、字符串表达式
字符串表达式由字符串、字符串变量、操作符以及括号组成。字符串的最大长度为512字节,最小长度为0.下面介绍字符串表达式的组成元素。
字符串:由包括在双引号内的一系列的字符组成。字符串的长度遭到ARM汇编语言查办长度的约束。当在字符串中包括美元符号$或许引号"时,用$$一共一个$,用""一共一个"。
字符串变量:用伪操作GBLS或许LCLS声明,用SETS赋值。
操作符:
(1)LEN:回来字符串的长度
:LEN:A
其间,A为字符串变量
(2)CHR:能够将0~255之间的整数作为含一个ASCII字符的字符串。当有些ASCII字符不方便放在字符串中时,能够运用CHR将其放在字符串表达式中。
:CHR:A
其间,A为某一字符的ASCII值
(3)STR:将一个数字量或许逻辑表达式转化成串。关于32位的数字量而言,STR将其转化成8个十六进制数组成的串;关于逻辑表达式而言,STR将其转化成字符串T或许F
:STR:A
其间,A为数字量或许逻辑表达式
(4)LEFT:回来一个字符串最左端必定长度的子串
A:LEFT:B
其间,A为源字符串,B为数字量,一共LEFT将回来的字符个数
(5)RIGHT:回来一个字符串最右端必定长度的子串
A:RIGHT:B
其间,A为源字符串,B为数字量,一共RIGHT将回来的字符个数
(6)CC:用于衔接两个字符串。
A:CC:B
其间,A为第1个源字符串。B为第2个源字符串。CC操作符将字符串B衔接在字符串A的后边。
2、数字表达式
数字表达式由数字常量、数字变量、操作符和括号组成
数字变量用伪操作GBLA或许LCLA声明,用SETA赋值,它代表一个32位的数字量。
操作符:
(1)NOT:按位取反
:NOT:A
其间,A为一个32位数字量
(2)+、—、×、/及MOD算术操作符
A+B,A-B,A×B,A/B
A:MOD:B一共A除以B的余数
(3)ROL,ROR,SHL,SHR移位
A:ROL:B将整数A循环左移B位
A:SHL:B将整数A左移B位
(4)AND、OR及EOR按位逻辑操作符
A:AND:B将数字表达式A和B按位作逻辑与操作
3、根据寄存器和根据PC的表达式
根据寄存器的表达式一共了某个寄存器的值加上(或许减去)一个数字表达式
根据PC的表达式一共了PC寄存器的值加上(或减去)一个数字表达式。根据PC的表达式一般由程序中的标号与一个数字表达式组成。相关的操作符:
(1)BASE:回来根据寄存器的表达式中的寄存器编号。
:BASE:A
(2)INDEX:回来根据寄存器的表达式相关于其基址寄存器的偏移量。
:INDEX:A
(3)+、﹣:正负号,能够放在数字表达式或许根据PC的表达式前面。
+A(﹣A)
4、逻辑表达式
由逻辑量、逻辑操作符、联系操作符以及括号组成,取值规模为{FLASE}和{TRUE}
联系操作符:用于一共两个同类表达式之间的联系。联系操作符和它的两个操作数组成一个逻辑表达式,其取值为{FALSE}或{TRUE}
如A=B 一共A等于B
A/=B,A<>B一共A不等于B
逻辑操作符:进行两个逻辑表达式之间的根本逻辑操作。操作的成果为{FLASE}或{TRUE}
:LNOT:A 逻辑表达式A的值取反
A:LAND:B逻辑表达式A和B逻辑与
5、其他的一些操作符
(1)?:回来界说符号A的代码行所生成的可执行代码的字节数
?A
其间,A为一个符号
(2)DEF:判别某个符号是否已界说
:DEF:A
假如符号A现已界说,上述成果为{TRUE},否则为{FLASE}
(3)SB_OFFSET_19_12
:SB_OFFSET_19_12:label 其间,label为一个标号
回来(label-SB)的bits[19:12]
(4)SB_OFFSET_11_0
:SB_OFFSET_11_0:label
回来(label-SB)的bits[11:0]
参阅文章
1. http://hi.baidu.com/%CF%EB%B7%C9%B5%C4%B4%FC%CA%F3/blog/item/ba6e93cb867a9e17be09e68e
2. ARM嵌入式体系结构与编程.邱铁。清华大学出版社
3. ARM嵌入式体系入门.三恒星科技.中国电力出版社
4. ARM嵌入式应用技术根底.刘凯.清华大学出版社