如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
1第九章ARM程序设计第九章ARM程序设计9.1ARM常用开发环境RVDS开发环境简介CodeWarriorIDE的主窗口RVD调试器主窗口汇编语言程序汇编语言程序汇编语言程序设计特点9.2符号定义伪指令GBLATest1;声明全局算术变量Test1,赋值为0xaaTest1SETA0xaaGBLLTest2;声明全局逻辑变量Test2,赋值为“真”Test2SETL{TRUE}GBLSTest3;声明全局字符串变量为Test3,赋值为"Testing“Test3SETS"Testing“LCLATest4;声明局部数字变量Test4,赋值为0xaaTest4SETA0xaaLCLLTest5;声明局部逻辑变量Test5,赋值为“真”Test5SETL{TRUE}LCLSTest6;声明局部字符串变量Test6,赋值为"Testing“Test6SETS"Testing“RegListRLIST{R0-R5,R8,R10};声明寄存器列表RegList,LDM/STM指令可通过该名称访问寄存器列表数据定义伪指令数据定义伪指令数据定义伪指令定义一个内存表,其首址为固定地址与R9和,表中包含同样字段。MAP0,R9;内存表首地址为0与R9寄存器内容的和AFIELD4;定义A的长度为4字节,相对位置为0BFIELD4;定义B的长度为4字节,相对位置为4XFIELD8;定义X的长度为8字节,相对位置为8YFIELD8;定义Y的长度为8字节,相对位置为16StringFIELD256;定义String为256字节,相对位置为24ADRR9,DATASTART;伪指令ADR初始化R9LDRR5,B;相当于LDRR5,[R9,#4]汇编控制伪指令宏和宏定义指令定义一条宏指令,使其可以完成测试-跳转操作。MICRO;宏定义开始$lableTestAndBranch$dest,$reg,$cc$lableCMP$reg,#0B$cc$destMEND;宏定义结束MICRO;宏定义开始$lablexmac$p1,$p2;宏的名称为xmac,有两个参数$p1和$p2$lable.loop1;$lable.loop1为宏定义体的内部标号……BGE$lable.loop1$lable.loop2指令;$lable.loop2为宏定义体的内部标号BL$p1;参数$p1为一个子程序的名称BGT$lable.loop2……ADR$p2MEND;宏定义结束其它常用伪指令AREA、ENTRY、END伪指令ALIGN伪指令CODE16、CODE32伪指令EQU伪指令EXPORT(或GLOBAL)标号{[WEAK]}IMPORT(或EXTERN)标号{[WEAK]}EXPORT用于声明一个全局标号,该标号可在其他文件中引用。[WEAK]选项声明其他同名标号优先于该标号被引用。IMPORT用于通知编译器当前源文件可能要引用其他源文件中定义的标号。[WEAK]选项表示所有源文件都没有定义这个标号时编译器不会给出错误信息,在多数情况下将该标号置为0。若该标号被B或BL指令引用,则将B或BL指令置为NOP操作。使用IMPORT则标号一定会被加入到当前源文件的符号表中。使用EXTERN则标号未被引用时不会被加入到当前源文件的符号表中。标号在程序中区分大小写。AREAInit1,CODE,READONLYEXPORTMain;源文件1声明一个可全局引用的标号Main……ENDAREAInit2,CODE,READONLYIMPORTMain;源文件2需要引用在别处定义的标号Main……ENDINCLUDE(或GET)、INCBIN伪指令汇编语言中常用的符号常量变量常用运算符和表达式算术/逻辑表达式及运算符字符串表达式及运算符其它常用运算符ARM汇编语言程序结构ARM汇编语言程序结构示例ARM(Thumb)汇编语句格式AREAInit,CODE,READONLYENTRYSTARTLDRR0,=0x3FF5000LDRR1,0xFFSTRR1,[R0]LDRR0,=0x3FF5008LDRR1,0x01STRR1,[R0]…ENDAREABlock,CODE,READONLYnumEQU20;设置将要复制的字数ENTRYStartLDRR0,=src;R0指向源数据区srcLDRR1,=dst;R1指向目标数据区dstMOVR2,#num;R2保存将要复制的字数MOV