欢迎来到天天文库
浏览记录
ID:3856325
大小:835.50 KB
页数:30页
时间:2017-11-24
《arm体系结构及编程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、ARM体系结构及编程大唐微电子多媒体技术开发部柯红生2004/05/09主要内容ARM概述ARM指令集ARM存储系统ARM程序和Thumb程序的混合使用汇编与C的混合编程异常中断处理调试工具Realview的介绍6/13/2021ARM概述ARM是一家公司名字,专门出售芯片技术授权ARM主要应用领域:无线设备、蓝牙技术、联网、消费电子、汽车、成像、安全产品等ARM体系结构的版本:版本1-6。变种:T变种(Thumb指令集)、E变种(增强型DSP指令)、SIMD变种(ARM媒体功能扩展)等ARM处理器系列:ARM7/ARM9/ARM9E/ARM10E/Xscale/StrongARM等
2、6/13/2021ARM指令集ARM指令寻址方式数据处理指令的操作数的寻址方式字及无符号字节的Load/Store指令的寻址方式杂类Load/Store指令的寻址方式批量Load/Store指令的寻址方式协处理器Load/Store指令的寻址方式6/13/2021ARM指令集ARM指令集分类跳转指令数据处理指令程序状态寄存器传输指令Load/Store指令协处理器指令异常中断产生指令6/13/2021跳转指令B跳转指令BL带返回的跳转指令BLX带返回和状态切换的跳转指令BX带状态切换的跳转指令6/13/2021数据处理指令MOV数据传送指令MVN数据求反传送指令CMP比较指令CMN基
3、于相反数的比较指令TST位测试指令TEQ相等测试指令ADD加法指令SUB减法指令RSB逆向减法指令ADC带位加法指令SBC带位减法指令RSC带位逆向减法指令AND逻辑与操作指令BIC位清除指令EOR逻辑异或操作指令ORR逻辑或操作指令MUL乘法指令6/13/2021状态寄存器访问指令MRS状态寄存器到通用寄存器的传送指令MSR通用寄存器到状态寄存器的传送指令6/13/2021Load/Store指令LDR??从内存中读取数据到寄存器中STR??将寄存器中的数据写入内存LDM批量内存数据读取STM批量内存数据写入注:??表示不同的符号代表不同的意思,如LDRSB表示有符号的字节数据读取
4、。6/13/2021协处理器指令CDP协处理器数据操作指令LDC协处理器数据读取指令STC协处理器数据写入指令MCRARM寄存器到协处理器寄存器的数据传送指令MRC协处理器寄存器到ARM寄存器的数据传送指令6/13/2021异常中断产生指令SWI软中断指令BKPT断点中断指令6/13/2021ARM存储系统ARM中用于存储管理的系统控制协处理器CP15有16个32位寄存器C0-C15,如C1是控制寄存器:禁止/使能MMU,CACHE等ARM中的存储管理部件MMU完成虚拟存储空间到物理存储空间的映射控制存储器访问权限设置虚拟存储空间的缓冲特性ARM中CACHE及WRITEBUFFER技
5、术速度的匹配,位于CPU和主存储器之间,提高存储系统功能与之有关的寄存器包括CP15中的C7/C9/C1快速进程上下文切换技术避免在进行进程间切换时虚拟地址到物理地址的重映射与之有关的寄存器包括CP15中的C136/13/2021ARM程序和Thumb程序的混合使用ATPCS介绍(ARM和Thumb程序中子程序的调用规则)ARM和Thumb程序混合使用的需要及规则6/13/2021ATPCS介绍基本ATPCS特定的调用规则:如支持ARM和Thumb混合使用的ATPCS,支持浮点运算的ATPCS等有调用关系的所有子程序必须遵守同一种ATPCS6/13/2021基本ATPCS基本规则:各
6、寄存器的使用规则及其相应的名称寄存器的使用:R0-R3传递参数,R4-R11保存局部变量等数据栈的使用规则规定数据栈为FD类型(FULL&DESCENDING)参数传递的规则分参数个数固定的子程序和参数个数可变的子程序6/13/2021ARM和Thumb程序混合使用的需要混合使用的需要:Thumb程序比ARM程序更加紧凑,对于内存为8位或16位系统,它的效率更高。强调速度的场合,应该用ARM程序有一些功能只能由ARM程序来完成6/13/2021ARM和Thumb程序混合使用的规则对于C/C++源程序在编译时指定-apcs/interwork选项在同一C/C++源程序中只能包含ARM指
7、令或Thumb指令对于汇编程序必须保证代码遵守支持混合使用的ATPCS有两种方法来实现程序状态的切换:1、利用连接器提供的小程序(veneers)来实现。2、用户自己编写状态切换的程序6/13/2021汇编与C的混合编程在C/C++程序中使用内嵌的汇编指令语法格式:使用_asm来标识一段汇编指令程序一行中有多个汇编指令,指令之间用分号(;)格开.一条指令占多行,要用续行符号().不要使用物理寄存器去引用一个C变量。在指令中使用的物理寄存器,应该保证该寄存
此文档下载收益归作者所有