INFO
汇编诊断信息显示伪指令,在汇编器处理过程中的第一遍扫描或第一遍扫描时报告诊断信息。
伪指令格式:
INFO numeric_expr,string_expr
其中:numeric_expr 数据表达式。若值为0,则在第一遍扫描时报告诊断信息。否则在第一遍扫描时报告诊断信息。
strint_expr 要显示的字串
伪指令应用举例如下:
INFO 0,”Version 0。1” ;在第二遍扫描时,报告版本信息
if cont1 > cont2 ;如果cont1 > cont2
INFO 1,”cont1 > cont2” ;则在第一遍扫描时报告”cont1 > cont2”
OPT
设置列表选项伪指令。通过OPT 伪指令可以在源程序中设置列表选项。
伪指令格式:
OPI n
其中n 所设置的选项的编码如下:
1 设置常规列表选项
2 关闭常规列表选项
4 设置分页符,在新的一页开始显示
8 将行号重新设置为0
16 设置选项,显示SET、GBL、LCL 伪指令
32 设置选项,不显示SET、GBL、LCL 伪指令
64 设置选项,显示宏展开
128 设置选项,不显示宏展开
256 设置选顶,显示宏调用
512 设置先项,不显示宏调用
1024 设置选顶,显示第一遍扫描列表
2048 设置选项,不显示第一遍扫描列表
4096 设置选项目,显示条件汇编伪指令
8192 设置选项,不显示条件汇编伪指令
16384 设置选项,显示MEND 伪指令
32768 设置选项,不显示MEND 伪
默认情况下,-list 选项生成常规的列表文件,包括变量声明,宏展开,条件汇编伪指令及MEND 伪指令,而且列表文件只是在第二遍扫描时给出,通过OPT 伪指令,可以在源程序中改变默认的选项。
伪指令应用举例如下:
… ;代码
OPT 512 ;不显示宏调用
… ;代码
TTL 和SUBT
TTL 和SUBT 为插入标题伪指令。
TTL 伪指令在列表文件的每一页的开头插入一个标题。该TTL 伪指令的作用在其后的每一页,直到遇到新的TTL 伪指令。
SUBT 伪指令在列表文件的每页的开头第一个子标题。该SUBT 伪指令的作用在其后的每一页,直到遇到新的SUBT 伪指令。
伪指令格式:
TTL title
SUBT subtitle
其中:title 标题名。
subtitle 子标题名。
伪指令应用举例如下:
…
TTL mainc
…
SUBT subc con
…
A.4.3 汇编控制伪指令
汇编控制伪指令用于条件汇编、宏定义、重复汇编控制等。该类伪指令如下:
条件汇编控制: IF、ELSE 和ENDIF
宏定义: MACRO 和MEND
重复汇编: WHILE 及WEND
IF、ELSE 和ENDIF
IF 、ELSE 和ENDIF 伪指令能够根据条件把一段代码包括在汇编程序内或将其排除在程序之外。
[与IF 同义,|与ELSE 同义,]与ENDIF 同义。
伪指令格式:
IF logical_expr
;指令或伪指令代码段1
ELSE
;指令或伪指令代码段2
ENDIF
其中:logical_expr 用于控制的逻辑表达式。若条件成立,则代码段落在汇编源程序中有效。若条件不成立,代码段1 无效,同时若使用ELSE 伪指令,代码段有效。
伪指令应用举例如下:
…
IF {CONFIG}=16
BNE __rt_udiv_1
LDR R0,=__rt_div0
BX R0
ELSE
BEQ __rt_div0
ENDIF
IF、ELSE 和ENDIF 伪指令是可以嵌套使用的。
MACRO 和MEND
MACRO 和MEND 伪指令用于宏定义。MACRO 标识宏定义的开始,MEND 标识宏定义久的结束。用MACRO 及MEND 定义的一段代码,称为宏定义体。这样在程序中就可以通过宏指令多次调用该代码段。
伪指令格式:
MACRO
{$label} macroname {$parameter} {$parameter}…
;宏定义体。
MEND
其中:$label 宏指令被展开时,label 可被替换成相应的符号,通常为一个标号在一个符号前使用$表示被汇编时将使用相应的值替代$后的符号。
macroname 所定义的宏的名称。
$parameter 宏指令的参数。当宏指令被展开时将被替换成相应的值,类似于函数中的形式参数。
对于子程序代码比较短,而需要传递的参数比较多的情况下可以使用汇编技术。首先要用MACR 和MEND 伪指令定义宏,包括宏定义体代码。在MACRO 伪指令之后的第一行声明宏的原型,其中包含该宏定义的名称,及需要的参数。在汇编程序中可以通过该宏定义的名称来调用它。当源程序被汇编时,汇编编译器将展开每个宏调用,用宏定义体代替源程序中的宏定义的名称,并用实际的参数值代替宏定义时的形式参数。
伪指令应用举例如下:
MACRO
CSI_SETB ;宏名为CSI_SETB,无参数
LDR R0,=rPDATG ;读取GPG0 口的值
LDR R1,[R0]
ORR R1,R1#0x01 ;CSI 置位操作
STR R1,[R0] ;输出控制
MEND
带参数的宏定义如程序清单:
MACRO
$IRQ_Label HANDLER $IRQ_Exception
EXPORT $IRQ_Label
IMPORT $IRQ_Exception
$IRQ_Label
SUB LR,LR,#4
STMFD SP!,{R0-R3,R12,LR}
MRS R3,STSR
STMFD SP!,{R3}
…
MEND