ARM嵌入式系统结构与编程课件:第6章 ARM汇编伪指令与伪操作.ppt
6.3.3汇编代码控制伪操作1.IF条件编译伪操作:根据条件来决定是否对一段程序代码进行编译语法格式:IF logical_expression 程序代码段A {ELSE 程序代码段B}ENDIF例:IF UART0=ON BLUART0_initELSE BLUART1_initENDIF6.3.3汇编代码控制伪操作2.WHILE条件编译伪操作语法格式:WHILElogical_expression 程序代码段WEND功能:重复编译程序代码段直到logical_expression不成立。例:counterSETA100WHILEcounter0 ……counterSETAcounter-1WEND6.3.3汇编代码控制伪操作3.MACRO宏定义伪操作语法格式:MACRO{$label} macroname {$parameter{,$parameter}…} 程序代码段MEND其中:{$label}在宏指令被展开时,标号被替换成用户定义的符号 {$parameter…}为宏的参数列表,当宏被展开时被替换为相应的值。功能:将一段程序代码定义成一个宏。6.3.3汇编代码控制伪操作3.MACRO宏定义伪操作宏在调用时被替换展开,没有其他的附加操作。宏多用于所定义的程序代码量较小,而需要传送参数比较多的场合。相对子程序调用而言,能有效提高处理速度。如果变量在宏定义中被定义,则该变量只在该宏定义体中有效。6.3.3汇编代码控制伪操作3.MACRO宏定义伪操作例6-30(验证)在ARM和Thumb代码中,测试并跳转操作需要执行两条ARM指令。可以定义一个与下面类似的宏来实现相应的操作:MACRO $labelTestAndBranch$dest,$reg,$cc $labelCMP$reg,#0 B$cc$destMEND6.3.3汇编代码控制伪操作3.MACRO宏定义伪操作例6-30(续)宏调用:testTestAndBranchNonZero,R0,NE ….NonZero替换后将变成:test CMPR0,#0 BNENonZero …NonZero…6.3.4汇编信息报告控制伪操作信息报告伪操作用于程序汇编指示,主要是在程序调试阶段使用。这类伪操作分为错误信息报告伪操作、诊断信息报告伪操作、列表选项设置伪操作、插入文件标题伪操作6.3.4汇编信息报告控制伪操作1、错误信息报告ASSERT语法格式:ASSERTlogical_expression其中:logical_expression用于表示的条件的逻辑表达式。功能:用于保证源程序被汇编时满足相关的条件。如果汇编时逻辑表达式logical_expression不成立,ASSERT将报告错误信息。6.3.4汇编信息报告控制伪操作2、诊断信息报告INFOINFOnumeric_expression,string_expression其中:numeric_expression数字表达式。如果numeric_expression为0,则在第二遍扫描时,伪操作打印string_expression的内容;如果numeric_expression的值不为0,则在汇编处理中,第一遍扫描时,伪操作打印string-expression的内容,并终止汇编。6.3.4汇编信息报告控制伪操作3、列表选项设置OPTOPT为编译列表选项设置伪操作,用于在源程序中设置汇编列表选项。语法格式:OPT n其中:n是OPT指令设置选项编号。教材中表6-5列出了有效的选项编号及其含义。6.3.4汇编信息报告控制伪操作4、插入文件标题伪操作TTL与SUBT语法格式:TTLtitleSUBTsubtitle其中:title为所插入的列表文件的标题;subtitle为所插入的列表文件的子标题。功能:TTL/SUBT在列表文件显示一个标题/子标题。如果要在列表文件的第一页显示标题/子标题,TTL/SUBT要放在源程序的第一行。6.3.5指令集类型标识伪操作指令集类型标识伪操作用来告诉编译器所处理的是32位的ARM指令还是16位的Thumb指令,实现这一操作的操作符有ARM、CODE32、THUMB、CODE16指令集类型标识伪操作6.3.5指令集类型标识伪操作例: AREAARMThumb,CODE,READONLY ENTRY CODE32start ADRR0,in