文档详情

嵌入式第4章分析.ppt

发布:2017-01-07约1.56万字共99页下载文档
文本预览下载声明
4.2.6 装入和存储多个寄存器指令 ⒈ 用LDR和STR指令作块拷贝 例4.10是一段ARM代码程序,能够从数据块的源地址拷贝一组字到目的地址处,每次只拷贝一个字。 【例4.10】用LDR和STR指令作块拷贝。 (见参考书) * ⒉ 用LDM和STM指令作块拷贝 对于例4.10中的块拷贝代码,如果改成使用LDM和STM指令,效率会更高。假定一次传送8个字,在一个被拷贝的块中8个字的倍数可以这样去寻找(假如r2=被拷贝的字数): MOVS r3,r2,LSR #3 指令执行后,r3中是8个字的倍数,如果执行前r2=20,执行后r3=2。使用r3中的值,可以作为循环的控制次数,在循环中每次拷贝8个字。 如果被拷贝的字数小于8,或虽然大于8但不是8的整倍数,余下的字可以这样寻找(假如r2=被拷贝的字数,r2的内容允许被破坏): ANDS r2,r2,#7 假定指令执行前r2=20,执行后r2=4。 * 例4.11列出了重写的块拷贝模块,使用了LDM和STM指令。 【例4.11】用LDM和STM指令作块拷贝。 (见参考书) * 4.2.7 多路分支 以下代码根据R0中保存的不同的分支索引值,分支到不同的函数。各函数入口地址分别为Handler0,Handler1,…。 【例4.12】多路分支 (见参考书P143) * END * * * ⑵ 使用 使用SETA、SETL和SETS之前,必须先声明全局变量或局部变量,后设置它们的值。 * ⒋ 为协处理器寄存器定义一个名字的CN指示符 ⒌ 为指定的协处理器定义一个名字的CP指示符 (⒋和⒌具体内容见参考书) ⒍ 给符号名一个数值常数的EQU指示符 EQU也可以用 * 指示符代替。 ⑴ 格式 name EQU expression ⑵ 使用 使用EQU来定义常数,与C语言中#define类似。 ⑶ 使用举例 num2 EQU 25 ;给符号num2指定值为25 * ⒎ 声明全局符号的EXPORT或GLOBAL指示符 GLOBAL与EXPORT有相同的功能。 ⑴ 格式 EXPORT symbol {[qualifier{,qualifier}{,qualifier}]} ⑵ 使用 使用EXPORT指示符,允许别的文件中的代码引用当前文件中的符号。 ⑶ 使用举例 AREA TestSub,CODE,READONLY EXPORT DoSub ;函数名能被外部模块使用 … DoSub SUB r1,r2,r1 * ⒏ 为指定的浮点寄存器定义一个名字的FN指示符 ⒐ 声明其他文件定义的符号的IMPORT或EXTERN指示符 ⒑ 保留局部符号的KEEP指示符 ⒒ 定义寄存器列表名的RLIST指示符 ⒓ 定义寄存器名的RN指示符 (⒏ ⒐ ⒑ ⒒ ⒓具体内容见参考书) * 4.1.7 汇编控制指示符 ⒈ 条件汇编IF、ELSE和ENDIF指示符 IF指示符可以用 [ 代替;ELSE指示符可以用 | 代替;ENDIF指示符可以用 ] 代替。 IF指示符引入一个条件,由这个条件决定是否汇编指令和/或指示符代码1。 ELSE指示符标记指令和/或指示符代码2的开始,当IF后的条件为假,则汇编指令和/或指示符代码2。 ENDIF指示符标记条件汇编结束。 * ⑴ 格式 IF logical-expression 指令和/或指示符代码1 {ELSE 指令和/或指示符代码2} ENDIF ⑵ 使用 汇编器根据条件决定是否汇编某一段代码. * ⑶ 使用举例 GBLL Test ;声明一个全局逻辑变量 … [ Test=TRUE;IF… ;指令和/或指示符代码1 | ;ELSE ;指令和/或指示符代码2 ] ;ENDIF。 * ⒉ 重复汇编WHILE和WEND指示符 WHILE指示符测试一个条件,由这个条件决定是否汇编指令和/或指示符代码。 WEND指示符表示指令和/或指示符代码结束,由WHILE再次测试条件,决定是否重复进行汇编,直到条件不成立。 ⑴ 格式 WHILE logical-expression 指令和/或指示符代码
显示全部
相似文档