您的位置 首页 汽车

ARM汇编伪指令介绍之二

1、AREA语法格式:AREA段名属性1,属性2,……AREA伪指令用于定义一个代码段或数据段。其中,段名…

1、 AREA

语法格局:
AREA 段名 特点 1 ,特点 2 ,……
AREA 伪指令用于界说一个代码段或数据段。其间,段名若以数字最初,则该段名需用 “ | ” 括起来,如 |1_test| 。
特点字段表明该代码段(或数据段)的相关特点,多个特点用逗号分隔。常用的特点如下:
— CODE 特点:用于界说代码段,默以为 READONLY 。
— DATA 特点:用于界说数据段,默以为 READWRITE 。
— READONLY 特点:指定本段为只读,代码段默以为 READONLY 。
— READWRITE 特点:指定本段为可读可写,数据段的默许特点为 READWRITE 。
— ALIGN 特点:运用办法为 ALIGN 表达式。在默许时, ELF (可履行衔接文件)的代码段和数据段是按字对齐的,表达式的取值规模
为 0 ~ 31 ,相应的对齐办法为 2 表达式次方。
— COMMON 特点:该特点界说一个通用的段,不包括任何的用户代码和数据。各源文件中同名的COMMON 段同享同一段存储单元。
一个汇编语言程序至少要包括一个段,当程序太长时,也能够将程序分为多个代码段和数据段。
运用示例:
AREA Init , CODE , READONLY
该伪指令界说了一个代码段,段名为 Init ,特点为只读
2、 ALIGN
语法格局:
ALIGN { 表达式 { ,偏移量 }}
ALIGN 伪指令可通过增加填充字节的办法,使当时方位满意必定的对其办法 | 。其间,表达式的值用于指定对齐办法,或许的取值为 2 的幂,如 1 、 2 、 4 、 8 、 16 等。若未指定表达式,则将当时方位对齐到下一个字的方位。
偏移量也为一个数字表达式,若运用该字段,则当时方位的对齐办法为: 2 的表达式次幂+偏移量。
运用示例:
AREA Init , CODE , READONLY , ALIEN = 3 ;指定后边的指令为 8 字节对齐。
指令序列
END
3、 CODE16、CODE32
语法格局:
CODE16 (或 CODE32 )
CODE16 伪指令告诉编译器,这以后的指令序列为16 位的 Thumb 指令。
CODE32 伪指令告诉编译器,这以后的指令序列为32 位的 ARM 指令。
若在汇编源程序中一起包括 ARM 指令和 Thumb 指令时,可用 CODE16 伪指令告诉编译器这以后的指令序列为 16 位的 Thumb 指令, CODE32 伪指令告诉编译器这以后的指令序列为 32 位的 ARM 指令。因而,在运用 ARM 指令和 Thumb 指令混合编程的代码里,可用这两条伪指令进行切换,但留意他们只告诉编译器这以后指令的类型,并不能对处理器进行状况的切换。
运用示例:
AREA Init , CODE , READONLY
……
CODE32 ;告诉编译器这以后的指令为 32 位的 ARM 指令
LDR R0 ,= NEXT + 1 ;将跳转地址放入寄存器 R0
BX R0 ;程序跳转到新的方位履行,并将处理器切换到 Thumb 作业状况
……
CODE16 ;告诉编译器这以后的指令为 16 位的 Thumb 指令
NEXT LDR R3,=0x3FF
……
END ;程序完毕
4、 ENTRY
语法格局:
ENTRY
ENTRY 伪指令用于指定汇编程序的进口点。在一个完好的汇编程序中至少要有一个 ENTRY (也能够有多个,当有多个 ENTRY 时,程序的真实进口点由链接器指定),但在一个源文件里最多只能有一个 ENTRY(能够没有)。
运用示例:
AREA Init , CODE , READONLY
ENTRY ;指定应用程序的进口点
……
5、 END
语法格局:
END
END 伪指令用于告诉编译器现已到了源程序的结束。
运用示例:
AREA Init , CODE , READONLY
……
END ;指定应用程序的结束
6、 EQU
语法格局:
称号 EQU 表达式 { ,类型 }
EQU 伪指令用于为程序中的常量、标号等界说一个等效的字符称号,类似于 C 语言中的# define 。
其间 EQU 可用“ * ”替代。
称号为 EQU 伪指令界说的字符称号,当表达式为 32 位的常量时,能够指定表达式的数据类型,能够
有以下三种类型:
CODE16 、 CODE32 和 DATA
运用示例:
Test EQU 50 ;界说标号 Test 的值为 50
Addr EQU 0x55 , CODE32 ;界说 Addr 的值为 0x55 ,且该处为 32 位的 ARM 指令。
7、 EXPORT(或GLOBAL)
语法格局:
EXPORT 标号 {[WEAK]}
EXPORT 伪指令用于在程序中声明一个大局的标号,该标号可在其他的文件中引证。 EXPORT可用GLOBAL 替代。标号在程序中区别大小写, [WEAK] 选项声明其他的同名标号优先于该标号被引证。
运用示例:
AREA Init , CODE , READONLY
EXPORT Stest ;声明一个可大局引证的标号Stest……
END
8、 IMPORT
语法格局:
IMPORT 标号 {[WEAK]}
IMPORT 伪指令用于告诉编译器要运用的标号在其他的源文件中界说,但要在当时源文件中引证,并且不管当时源文件是否引证该标号,该标号均会被加入到当时源文件的符号表中。
标号在程序中区别大小写, [WEAK] 选项表明当一切的源文件都没有界说这样一个标号时,编译器也不给出错误信息,在大都情况下将该标号置为 0 ,若该标号为 B 或 BL 指令引证,则将 B 或 BL指令置为NOP 操作。
运用示例:
AREA Init , CODE , READONLY
IMPORT Main ;告诉编译器当时文件要引证标号Main,但Main 在其他源文件中界说……
END
9、 EXTERN
语法格局:
EXTERN 标号 {[WEAK]}
EXTERN 伪指令用于告诉编译器要运用的标号在其他的源文件中界说,但要在当时源文件中引证,假如当时源文件实践并未引证该标号,该标号就不会被加入到当时源文件的符号表中。标号在程序中区别大小写, [WEAK] 选项表明当一切的源文件都没有界说这样一个标号时,编译器也不给出错误信息,在大都情况下将该标号置为 0 ,若该标号为 B 或 BL 指令引证,则将 B 或 BL指令置为 NOP 操作。
运用示例:
AREA Init , CODE , READONLY
EXTERN Main ;告诉编译器当时文件要引证标号Main,但Main 在其他源文件中界说……
END
10、 GET(或INCLUDE)
语法格局:
GET 文件名
GET 伪指令用于将一个源文件包括到当时的源文件中,并将被包括的源文件在当时方位进行汇编处理。能够运用 INCLUDE 替代 GET 。
汇编程序中常用的办法是在某源文件中界说一些宏指令,用 EQU 界说常量的符号称号,用MAP和FIELD 界说结构化的数据类型,然后用 GET 伪指令将这个源文件包括到其他的源文件中。运用办法与 C 语言中的 “ include ” 类似。
GET 伪指令只能用于包括源文件,包括方针文件需求运用INCBIN伪指令
运用示例:
AREA Init , CODE , READONLY
GET a1.s ;告诉编译器当时源文件包括源文件a1.s
GE T C:\a2.s ;告诉编译器当时源文件包括源文件C:\ a2.s ……
END
11、 INCBIN
语法格局:
INCBIN 文件名
INCBIN 伪指令用于将一个方针文件或数据文件包括到当时的源文件中,被包括的文件不作任何变化的存放在当时文件中,编译器从这以后开端持续处理。
运用示例:
AREA Init , CODE , READONLY
INCBIN a1.dat ;告诉编译器当时源文件包括文件a1.dat
INCBIN C:\a2.txt ;告诉编译器当时源文件包括文件C:\a2.txt……
END
12、 RN
语法格局:
称号 RN 表达式
RN 伪指令用于给一个寄存器界说一个别号。选用这种办法能够便利程序员回忆该寄存器的功用。
其间,称号为给寄存器界说的别号,表达式为寄存器的编码。
运用示例:
Temp RN R0 ;将R0 界说一个别号Temp
13、 ROUT
语法格局:
{ 称号 } ROUT
ROUT 伪指令用于给一个部分变量界说效果规模。在程序中未运用该伪指令时,部分变量的效果规模为
地点的 AREA ,而运用 ROUT 后,部分变量的作为规模为当时 ROUT 和下一个 ROUT 之间。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/276482.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部