??????? $HandlerLabel HANDLER $HandleLabel
??????? $HandlerLabel
??????? sub sp,sp,#4 ;decrement sp(to store jump address)
??????? stmfd sp!,{r0} USH the work register to stack
??????? ldr r0,=$HandleLabel;load the address of HandleXXX to r0
??????? ldr r0,[r0] ;load the contents(service routine start address) of HandleXXX
??????? str r0,[sp,#4] ;store the contents(ISR) of HandleXXX to stack
??????? ldmfd sp!,{r0,pc} OP the work register and pc(jump to ISR)
??????? MEND
//MACRO……MEND
功能:标志一下宏的定义。
格式:MACRO
?????Macro_prototype
?????MEND
宏表达式的格式如下:
{$label}?? macroname??? {$ parameter{,parameter2}…}
其中:
$ label?? 参数,在宏使用时,被给定的符号替代。
Macroname?? 宏的名称,并不一定以一条指令或者符号名开始。
$parameter??? 在宏使用时,被替代的参数,格式为:$parameter=“default value”
???在宏体中,参数如:$parameter和变量一样使用,在被宏引用时,被赋于新值,参数必须用“$”符号加于区别。$label在宏定义内部符号时很有用,可以看作宏的参数。使用“|”符号作为使用一个参数缺省值的变量,如果使用的是一个空格符串,将省去该变量。在使用内部标志的宏定义中,将内部标志定义为带后缀的标志,将会很有用。如果在扩展中空间不够,可以作为参数和后继文字之间或者参数之间使用圆点隔开,但在文本和后继参数之间不能使用圆点。宏可以定义局部变量的范围。宏还可以嵌套使用。
例:
MACRO
$label??? xmac??? $p1,$p2
????????? LCLS?? err
$labell,loopl
????????? BGE??? $pl
$labell,loop2
????????? BL???? $p1
????????? BEG????? $p1
????????? BEG????? $labell,loop2
MEND?
*****************************************************
??? 五、$和$$
//$临时变量替换,若程序中需要用字符$则用$$来表示,通常情况下,包含在两个||之间的$并不表示进行变量替换,但是如果|线是在双引号内,则将进行变量替换。用“.”来分割出变量名的用法,
?GBLS STR1
?GBLS STR2
STR1?SETS "AAA"
STR2?SETS "BBB$$STR1.CCC"? //汇编后STR2的值为bbAAACCC
*****************************************************
??? 六、 IMPORT? Main??? ; The main entry of mon program
//该伪操作告诉编译器当前的符号不是在本文件中定义的,在本源文件中可能引用该符号,而不论该源文件是否使用该符号,该符号都将被加入到本源文件中。
格式:
IMPORT symbol {[WEAK]}
??? symbol 引用的符号的名称,他是区分大小写的,[WEAK]指定这个选项后,如果symbol所在的源文件中没有被定义,编译器也不会报错。他和EXTERN作用相同,不同之处在于,如果本源文件没有实际引用该符号,该符号将不会被加入到本源文件的符号表中。