第一讲_伪操作、宏指令与伪指令_第1页
第一讲_伪操作、宏指令与伪指令_第2页
第一讲_伪操作、宏指令与伪指令_第3页
第一讲_伪操作、宏指令与伪指令_第4页
第一讲_伪操作、宏指令与伪指令_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 伪操作、宏指令及伪指令概念伪操作、宏指令及伪指令概念 两种常见的两种常见的ARM编译环境编译环境 ADS编译环境下的伪操作编译环境下的伪操作 GNU编译环境下的伪操作编译环境下的伪操作 ARM汇编语言的伪指令汇编语言的伪指令 一、一、伪操作、宏指令伪操作、宏指令及伪指令概念及伪指令概念 伪操作是ARM汇编语言程序里的一些特殊指 令助记符,主要是为完成汇编程序做各种准备 工作,在源程序进行汇编时由汇编程序处理, 而不是在处理器运行期间由机器执行。 宏指令是一段独立的程序代码,它通过伪操作 来定义。通过宏名来调用宏,并可以设置相应 的参数。宏定义本身不会产生代码,只是在调 用它时把宏体插入到源程

2、序中。 伪指令也是ARM汇编语言程序里的特殊指令 助记符,也不在处理器运行期间由机器执行, 它们在汇编时将被合适的机器指令代替成 ARM或Thumb指令从而实现真正指令操作。 二、二、两种常见的两种常见的ARM编译开发环境编译开发环境 ADS/SDT IDE开发环境:它由ARM公司开 发,使用了CodeWarrior公司的编译器; 集成了GNU开发工具的IDE开发环境: 它由GNU的汇编器as、交叉编译器gcc、和 链接器ld等组成。 三、三、ADS环境下的伪操作和宏指令环境下的伪操作和宏指令 ADS编译环境下的伪操作可分为以下几类: 符号定义(Symbol Definition)伪操作 数据

3、定义(Data Definition)伪操作 汇编控制(Assembly Control)伪操作 信息报告(Reporting)伪操作 其他(Miscellaneous)伪操作 符号定义伪操作符号定义伪操作 伪操作语法格式作 用 GBLAGBLA Variable声明一个全局的算术变量,并将其初始化成0。 GBLLGBLL Variable声明一个全局的逻辑变量,并将其初始化成FALSE。 GBLSGBLS Variable声明一个全局的字符串变量,并将其初始化成空串“”。 LCLALCLA Variable声明一个局部的算术变量,并将其初始化成0。 LCLLLCLL Variable声明一个

4、局部的逻辑变量,并将其初始化成FALSE。 LCLSLCLS Variable声明一个局部的串变量,并将其初始化成空串“”。 SETASETA Variable expr给一个全局或局部算术变量赋值。 SETLSETL Variable expr给一个全局或局部逻辑变量赋值。 SETSSETS Variable expr给一个全局或局部字符串变量赋值。 RLISTname LISTlist of registers为一个通用寄存器列表定义名称。 CNname CN expr为一个协处理器的寄存器定义名称。 CPname CP expr为一个协处理器定义名称。 DN/SNname DN/SN e

5、xprDN/SN为一个双精度/单精度的VFP寄存器定义名称。 FNname FN expr为一个FPA浮点寄存器定义名称。 数据定义伪操作数据定义伪操作 伪操作语法格式作 用 LTORGLTORG声明一个数据缓冲池(也称为文字池)的开始。 MAPMAP expr,base-register定义一个结构化的内存表(Storage Map)的首地址。 FIELDlabel FIELD expr定义一个结构化内存表中的数据域。 SPACElabel SPACE expr分配一块连续内存单元,并用0初始化。 DCBlabel DCB expr,expr分配一段字节内存单元,并用expr初始化。 D C

6、 D / DCDU label DCD expr ,expr分配一段字内存单元。 DCDOlabel DCDO expr, expr 分配一段字对齐的字内存单元。 D C F D / DCFDU label DCFD Ufpliteral, fpliteral 为双精度的浮点数分配字对齐的内存单元。 D C F S / DCFSU label DCFS U fpliteral ,fpliteral 为单精度的浮点数分配字对齐的内存单元。 DCIlabel DCI expr,expr在ARM代码中分配一段字对齐的内存单元; 在Thumb代码中, 分配一段半字对齐的半字内存单元。 D C Q /

7、DCQU label DCQU literal,literal 分配一段以双字(8个字节)为单位的内存 D C W / DCWU label DCWUexpr, expr DCW用于分配一段半字对齐的半字内存单元。 汇编控制伪操作汇编控制伪操作 伪操作语法格式作 用 IF,ELSE及 ENDIF IF logical expression ELSE ENDIF 能够根据条件把一段源代码包括在汇编 语言程序内或者将其排除在程序之外。 W H I L E 及 WEND WHILE logical expression WEND 能够根据条件重复汇编相同的一段源代 码。 MACRO 、 M E N

8、D 及 MEXIT MACRO $label macroname $parameter, $parameter ;宏代码 MEND MACRO标识宏定义的开始,MEND标 识宏定义的结束。MERIT用于从宏中跳 转出去。用MACRO和MEND定义的一 段代码,称为宏定义体。通过宏名称来 调用宏。 信息报告伪操作信息报告伪操作 伪操作语法格式作 用 ASSERTASSERT logical expression对汇编程序的第二遍扫描中,如果其中ASSERT中条件 不成立,ASSERT伪操作将报告该错误信息。 INFOINFO numeric-expression, string-expressi

9、on 在汇编处理过程的第一遍扫描或者第二遍扫描时INFO伪 操作报告诊断信息。 OPTOPT n通过OPT伪操作可以在源程序中设置列表选项。 TTL TTL title在列表文件的每一页的开头插入一个标题。 SUBTSUBT subtitle在列表文件的每一页的开头插入一个子标题。 其他伪操作其他伪操作 伪操作语法格式作 用 CODE16CODE16告诉汇编编译器后面的指令序列为16位的Thumb指令 CODE32CODE32告诉汇编编译器后面的指令序列为32位的ARM指令。 EQUname EQU expr,type为数字常量、基于寄存器的值和程序中的标号(基于PC的值)定义一个字符名称。

10、AREAAREA sectionname,attr,attr定义一个代码段或者数据段。 ENTRYENTRY指定程序的入口点。 ENDEND告诉编译器已经到了源程序结尾。 ALIGNALIGN expr,offset通过添加补丁字节使当前位置满足一定的对齐方式。 E X P O R T / GLOBAL EXPORT symbol WEAK声明一个符号可以被其他文件引用,相当于声明了一个全局变量。 IMPORTIMPORT symbol WEAK告诉编译器当前的符号不是在本源文件中定义的,而是在其他源文件中定义的,在本源 文件中可能引用该符号。 EXTERNEXTERN symbol WEAK

11、告诉编译器当前的符号不是在本源文件中定义的,而是在其他源文件中定义的,在本源 文件中可能引用该符号。 GET/ INCLUDE GET filename 将一个源文件包含到当前源文件中,并将被包含的文件在其当前位置进行汇编处理。 INCBININCBIN filename将一个文件包含到当前源文件中,被包含的文件不进行汇编处理。 KEEPKEEPsymbol告诉编译器将局部符号包含在目标文件的符号表中。 NOFPNOFP禁止源程序中包含浮点运算指令。 REQUIREREQUIRE lable指定段之间的相互依赖关系。 RNname RN expr为一个特定的寄存器定义名称。 ROUTname

12、ROUT定义局部变量的有效范围。 四、四、 GNU环境下的伪操作和宏指令环境下的伪操作和宏指令 GNU编译环境下的伪操作可分为以下几类: 常量编译控制伪操作 字符编译控制伪操作 汇编程序代码控制伪操作 宏及条件编译控制伪操作 其他伪操作 常量编译控制伪操作常量编译控制伪操作 伪操作语法格式作 用 .byte.byte expr ,expr 分配一段字节内存单元,并用expr初始化。 .hword/.short.hword expr ,expr 分配一段半字内存单元,并用expr初始化。 .ascii.ascii expr ,expr 定义字符串expr(非零结束符)。 .asciz /.str

13、ing.asciz expr ,expr 定义字符串expr(以/0为结束符)。 .float/.single.float expr ,expr 定义一个32bit IEEE 浮点数expr。 .double.double expr ,expr 定义64bit IEEE浮点数expr。 word/.long /.int.word expr ,expr 分配一段字内存单元,并用expr初始化。 .fill.fill repeat ,size,value分配一段字节内存单元,用size长度value填充repeat次。 .zero.zero size分配一段字节内存单元,并用0填充内存。 .spa

14、ce/.skip.space size , value分配一段内存单元,用value将内存单元初始化。 常量编译控制伪操作常量编译控制伪操作 .byte .byte expr ,expr. 分配一段字节内存单元(字节对齐), 并用expr初始化 .byte 21,48,89,0 x13,0 xff 常量编译控制伪操作常量编译控制伪操作 .hword和.short .hword expr ,expr. .short expr ,expr. 分配一段半字的单元,并用expr 初始 化 .hword 21,25,89,0 x1133,0 x77FF .short 236,0 xF4F 常量编译控制伪

15、操作常量编译控制伪操作 .ascii .ascii expr ,expr. 定义字符串expr(非零结束符) .ascii “How are you” /*不是以“/0”结束*/ 常量编译控制伪操作常量编译控制伪操作 .ascii和.string .ascii expr ,expr. .string expr ,expr. 定义字符串expr,以“/0”结束 .ascii “how are you” .string “how are you” 常量编译控制伪操作常量编译控制伪操作 .float 和.single .float expr ,expr. .single expr ,expr. 定义

16、一个32位的IEEE浮点数expr .float expr .single expr .float 0F3.14,0F359.3E11 .single 0F12341234.14E2 常量编译控制伪操作常量编译控制伪操作 .double .double expr ,expr. 定义64位浮点数 .double 0F2E1 常量编译控制伪操作常量编译控制伪操作 .word和.long 和.int .word expr ,expr. .long expr ,expr. .int expr ,expr. 分配一段字内存单元,并用expr初始化 .word 21,0 x110033,0 x77ff22

17、55 Src: .long 1,2,3,4,5,6,7,8 /*定义一个数据区,以Src为起始地址*/ 常量编译控制伪操作常量编译控制伪操作 .fill .fill repeat ,size,value 分配一段字节的内存单元,用size长度 value填充repeat 次size缺省为1,value缺 省为0 .fill 8,4,0 xffffffff /*分配8个4字节的内存单元, 用0 xffffffff初始化*/ 常量编译控制伪操作常量编译控制伪操作 .zero .zero size 分配一段字节内存单元,并用0初始化 .zero 400 /*分配400个内存单元并用0初始化*/ 常量

18、编译控制伪操作常量编译控制伪操作 .space 和.skip .space size ,value .skip size ,value 分配一段内存单元,并用value 初始化, value缺省为0 .space 10,0 xff /*分配10字节内存单元,用 0 xff初始化*/ .skip 22 /*分配22字节内存单元,用0初始 化*/ 字符编译控制伪操作 伪操作语法格式应用举例 .equ .set .equ symbol,expr .set symbol,expr .equ num,20 .equ PCON,0 x0123 .global .globl .global symbol .

19、globl symbol .global Func .globl _start .extern.extern symbol.extern Func .extern num 汇编程序代码控制伪操作汇编程序代码控制伪操作 伪操作语法格式作 用 .section.section expr定义域中包含的段。 .text.text subsection将操作符开始的代码编译到代码段或代码段子段。 .data.data subsection将操作符开始的数据编译到数据段或数据段子段。 .bss.bss subsection将变量存放到.bss段或.bss段的子段。 .code 16/.thumb.code

20、 16 .thumb 表明当前汇编指令的指令集选择Thumb指令集。 .code 32/.arm.code 32 .arm 表明当前汇编指令的指令集选择ARM指令集。 .end.end标记汇编文件的结束行,即标号后的代码不作处理。 .include.include “filename”将一个源文件包含到当前源文件中。 .align/.balign.align alignment , fill ,max 通过添加填充字节使当前位置满足一定的对齐方式。 汇编程序代码控制伪操作汇编程序代码控制伪操作 .section .section expr 定义域中包含的段,expr可以 是.text、.dat

21、a、.bss .section .bss .section .text 汇编程序代码控制伪操作汇编程序代码控制伪操作 .text .text 表示代码段或代码子段 .text _start: MOV R0,#10 MOV R1,#5 ADD R0,R0,R1 .end 汇编程序代码控制伪操作汇编程序代码控制伪操作 .data .data 定义数据段或数据子段 .data Src: .long 1,2,3,4,5,6,7,8,9,0 Dst: .long 0,1,2,3,4,5,6,7,8,9 汇编程序代码控制伪操作汇编程序代码控制伪操作 .bss .bss 将变量存放到.bss段 汇编程序代码

22、控制伪操作汇编程序代码控制伪操作 .code 16|32 (.thumb和.arm) 选择是ARM指令集还是Thumb指令集 .code 32 Header: ADR R0,Start+1 BX R0 .code 16 Start: MOV R0,#10 MOV R1,#3 BL doadd 汇编程序代码控制伪操作汇编程序代码控制伪操作 .end 汇编文件结束,后面的代码不做处理 汇编程序代码控制伪操作汇编程序代码控制伪操作 .include 将一个源文件包含到当前源文件中 .include “44b0.h” 汇编程序代码控制伪操作汇编程序代码控制伪操作 .align和.balign .ali

23、gn alignment ,fill ,max 通过填充一定的字节,满足一定的对齐方 式,alignment对齐方式,可以是2的次幂, 缺省是4,fill是填充内容,max填充的最大 字节,如果填充字节数超过max就不进行对 齐 .align 4 宏及条件编译控制伪操作宏及条件编译控制伪操作 伪操作语法格式作 用 .macro、.exitm 及.endm .macro acroname parameter, parameter .endm .macro伪操作标识宏定义的开 始,.endm标识宏定义的结束。 用.macro及.endm定义一段代码,称 为宏定义体。.exitm伪操作用于提前 退出

24、宏。 . ifdef,.else 及.endif .ifdef condition .else .endif 当满足某条件时对一组语句进行编 译,而当条件不满足时则编译另一 组语句。其中else可以缺省。 宏及条件编译控制伪操作宏及条件编译控制伪操作 .macro和.endm .macro macroname param,param. . .endm 宏及条件编译控制伪操作宏及条件编译控制伪操作 .macro HANDLER Label SUB SP,SP,#4 STMFD SP!,R0 LDR R0,= Label LDR R0,R0 STR R0,SP,#4 LDMFD SP!,R0,PC

25、 .endm HANDLER Func 宏及条件编译控制伪操作宏及条件编译控制伪操作 .exitm 提前推出宏 .macro HANDLER Label SUB SP,SP,#4 STMFD SP!,R0 LDR R0,= Label .exitm LDR R0,R0 STR R0,SP,#4 LDMFD SP!,R0,PC .endm 宏及条件编译控制伪操作宏及条件编译控制伪操作 .ifdef、.else、.endif .ifdef PLLONSTART LDR R0,=PLLCON STR R1,R0 endif 其他伪操作其他伪操作 伪操作语法格式作 用 .eject.eject在汇编符号列表文件中插入一分页符。 .list.l

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论