分类: 嵌入式
2012-04-08 09:59:02
转自:http://blog.21ic.com/user1/6121/archives/2009/65558.html
在44b0中bootloader的初始化程序中,以下看不懂:
0 ;这是什么意思
ldmia r0!, {r4-r7}
stmia r2!, {r4-r7}
cmp r2, r3
bcc %B0 ;这又是什么意思,于是在google,baidu查找,没有相关说明,最后只好查书,功夫不负有心人,现解释如下:
这里是涉及局部标注的跳转,先要理解局部标注的定义,
一个标注的定义必须在一行的顶格书写。汇编器把所有不顶格的语句当成指令、保留字或宏。
汇编器把格式为:
其中
本地标注由ROUT关键字限定范围。
通过%{F|B}{|A|T}
1.如果指定为前缀F,则汇编器向前(Forward)查找;
2.如果指定了前缀B,则汇编器向后(Backward)查找,否则汇编器先向后再向前查找。
3.如果指定了前缀T,则汇编器只查找当前的宏;
4.如果指定了前缀A,则汇编器查找所有级别的宏,否则汇编器先查找当前的宏,再查找更高级别的嵌套层的宏。
现在再解释一下上面这段程序:
0 ;这就是本地标注,格式为:
ldmia r0!, {r4-r7}
stmia r2!, {r4-r7}
cmp r2, r3
bcc %B0 ;这里向前跳转,其中%是引用本地标注,格式为:%{F|B}{|A|T}
可以参考相关书籍《嵌入式系统开发》附录A.4.2。