您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > arm汇编编程(示例)
一、arm的认知及基本概念(一).arm的基本概念1.什么是armarm是一家英国电子公司的名字,全名是AdvancedRISCMachine这家企业设计了大量高性能、廉价、耗能低的RISC(精简指令集)处理器,ARM公司只设计芯片而不生产,它将技术授权给世界上许多公司和厂商。目前采用arm技术知识产权内核的微处理器,即通常所说的arm微处理器所以arm也是对一类微处理器的通称。arm指令集体系版本号(软件)为V1~V7目前V1~V3已很少见。从V4版不再与以前的版本兼容。arm的CPU系列(硬件)主要有ARM7~ARM112.典型的嵌入式处理器arm占市场79.5%ARMmips占市场13.9%MIPSmicroSPARC占市场3.1%SUNPowerPc占市场2.8%IBM其它占市场0.8%3.arm的应用范围:工业控制:如机床、自动控制等无线通信:如手机网络应用:如电子产品:如音视频播放噐、机顶盒、游戏机、数码相机、打印机其它各领域:如军事、医疗、机器人、智能家居等4.计算机体系结构见图:冯.诺依曼计算机体系图冯.诺依曼体系结构处理器使用同一个存储器,经由同一个总线传输完成一条指令需要3个步骤:即取指令-指令译码-执行指令指令和数据共享同一总线的结构哈佛体系结构将程序指令存储和数据存储分开中央处理器首先到程序指令存储器中读取程序指令。解码后到数据地址,再到相应的数据存储器读取数据,然后执行指令程序指令存储与数据存储分开,可以使指令和数据有不同的数据宽度。5.复杂指令集与精简指令集CISC复杂指令集:采用冯.诺依曼体系结构。数据线和指令线分时复用(只能通过一辆车)。存储器操作指令多汇编程序相对简单指令结束后响应中断CPU电路丰富面积大功耗大RISC精简指令集:采用哈佛体系结构。数据线和指令线分离(同时能通过多辆车)。对存储器操作有限汇编程序占空间大在适当地方响应中断CPU电路较少体积小功耗低ARM采用RISC精简指令集Thumb是ARM体系结构中一种16位的指令集。从ARMv4T之后,的ARM处理器有一种16-bit指令模式,叫做Thumb,较短的指令码提供整体更佳的编码密度,更有效地使用有限的内存带宽。所有ARM9和后来的家族,包括XScale都纳入了Thumb技术。即ARM有两种指令集:RISC、Thumb6.arm的思想1)arm体系的总思想:在不牺牲性能的同时,尽量简化处理器。同时从体系结构上灵活支持处理器扩展。采用RISC结构。RISC处理器简化了处理器结构,减少复杂功能指令的同时,提高了处理器速度。ARM及MIPS都是典型的RISC处理器2)arm的流水线结构arm处理器使用流水线来增加处理器指令流的速度,这样可以使几个操作同时进行。并使处理和存储器系统连续操作。arm处理器分为三级:取指-译码-执行取指:指令从存储器中取出译码:对指令使用的寄存器进行译码执行:从寄存器组中读取寄存器,执行移位和ALU操作,寄存器被写回到寄存器组中3)ARM处理器支持的类型字节8位半字16位字32位**所有数据操作都以字为单位**ARM指令的长度刚好是一个字,Thumb指令长度刚好是半个字4)ARM处理器状态ARM处理器内核使用ARM结构,该结构包含32位的ARM指令集和16位Thumb指令集,因此ARM有两种操作状态ARM状态:32位Thumb状态:16位5)处理器模式ARM处理器共有7种运行模式:用户:正常程序工作模式,不能直接切换到其它模式系统:用于支持操作系统的特权任务,可以直接切换到其它模式快中断:支持高速数据传输及通道处理,FIQ异常响应时进入此模式中断:用于通用中断处理,IRQ异常响应时进入此模式管理:操作系统保护代码,系统复位和软件中断响应时进入此模式中止:用于支持虚拟内存或存储器保护,用于MMU未定义:支持硬件协处理器的软件仿真,未定义指令异常响应时进入此模式。(二)、经典平台硬件组成见图:arm硬件组成图开发板一般是由一块组成的,有核心器件和外围器件接口等,但是有的是由两块板子组成,主版和核心板,主版上主要是外围接口,外围器件等,核心板上主要是核心器件,还有一些晶振电路等1.核心板(天嵌2440)CPU处理器S3C2440AL,主频400MHz(最高可达533MHz)SDRAM内存板载64MBSDRAM(标准配置),32bit数据总线SDRAM时钟频率高达100MHz(支持运行133MHz)NandFlash板载64MBNandFlash或256MBNandFlash(标准配置)NorFlash板载2MBNorFlash(最高可升级到8MB)CorePower专业1.25V核心电压供电Power核心板采用3.3V供电Powerled核心板电源指示灯核心板接口接口型号为DC-2.0双列直插SDRAM:随机存储器,普遍使用的内存。用作主存。NORFlash和NANDFlash是现在市场上两种主要的非易失闪存。NOR的特点是芯片内执行,应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中。NAND结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。2.主板电源并口线复位RTC电源RS232电平转换DB9插座音频IIS,AC97按键、PS/2与IC接口数码管触摸屏以太网卡主USBHUB1转43.寄存器见图:ARM模块和内核框图寄存器是中央处理器内的组成部份。寄存器是有限存贮容量的高速存贮部件,用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。IR用于存储指令PC用于存储程序运行的地址(即当前指令在内存中的位置)寄存器是由一个指令的输出或输入可以直接索引到的暂存器群组。所有的计算机指令都是进入寄存器后被直接读取ARM的汇编编程,本质上就是针对CPU寄存器的编程。//*******重点需要背讼*************************************************ARM寄存器分为2类:普通寄存器和状态寄存器(1)通用寄存器和计数器:共32个,15个通用寄存器R0-R7未备份寄存器R0(a1)R1(a1)R2(a3)R3(a4)R4(v1)R5(v2)R6(v3)R7(v4)R8-R12备份寄存器R8(v5)R9(SB,v6)R10(SL,v7)R11(EP,v8)R12(IP)数据寄存器R15(PC)程序计数器它的值是当前正在执行的指令在内存中的位置。当指令执行结束后,CPU会自动将PC值加上一个单位,PC值指向下一条即将执行的指令的地址如果通过汇编指令对PC寄存器赋值,就会完成一次程序的跳转(如从子函数跳转回主函数内)R14(LR)链接寄存器存放子程序的返回地址例如:在主函数内,如果调用子函数,程序会进入到子函数内执行。当子函数执行完毕后,需要回到主函数内,所以,在子函数调用前需要将这个地址先保存起来,否则无法找到这个地址。LR用于保存这个地址,这个地址也称为子程序返回地址。当子函数结束后,再将LR内的地址赋给PC即可。如果子程序再调用孙程序,LR如何保存地址呢?先把当前LR内的值压入内存的栈区,然后LR再保存孙程序的返回地址。当孙程序执行完后通过PC跳转到子程序内,此时将栈区内的子程序返回地址取出保存在LR内。当子程序执行完后,再通过PC跳转到主函数内。R13(SP)栈指针寄存器用于存放堆栈的栈顶地址。SP相当于指针变量,保存的是栈顶的地址,出栈时,从SP指向的内存中取出数据,入栈时将新的内存地址压入栈顶,而SP相当于链表的头指针(head)。原则上说R0-R12可以保存任何数据。其中R0-R7用来临时存储数据,R8-R12系统没有用来做任何特殊用途,常用于中断而在汇编与C语言的交互中,定制了ATPCS标准寄存器:R4-R11用来保存局部变量参数:参数小于等于4,用R0-R3保存参数,参数多于4,剩余的传入堆栈函数返回:结果为32位整数,通过R0返回结果为64位整数,通过R0,R1返回对于位数更多的结果,通过内存传递(2)状态寄存器:状态寄存器用于保存程序的当前状态CPSR当前程序状态寄存器一个寄存器为32位,每一位数据代表不同的状态。分为三个部分(条件代码标志位、控制位、保留区位)31322928....76543210NZCVIFTM4M3M2M1M0其中NZCV称为条件标志位(即保存的是条件的运算结果,真和假)N=1表示运算结果为负数,N=0表示运算结果为正数。Z=1表示运算结果为0,Z=0表示运算结果为非零。C=1表示运算结果产生了进位。V=1运算结果的符号位发生了溢出。这4个位的组合,代表了各种条件,如下:0000EQZ置位相等/等于00001NEZ清0不等0010CS/HSC置位进位/无符号高于或等于0011CC/LOC清0无进位/无符号低于0100MIN置位负数0101PLN清0非负数0110VSV置位溢出0111VCV清0无溢出1000HIC置位且Z清0无符号高于1001LSC清0或Z置位无符号低于或等于1010GEN等于V有符号大于或等于1011LTN不等于V有符号小于1100GTZ清0且N等于V有符号大于1101LEZ置位或N不等于V有符号小于或等于1110AL任何状态总是(always)1111NV无从不(never)IFT称为控制位II=1禁用IRO中断FF=1禁用FIQ中断T表示CPU当前的状态,1代表正在Thumb指令集状态,0表示正在ARM指令集状态。M0至M4表示中断类型(控制位内的模式位)0b10000User用户中断0b10001FIQ快速中断0b10010IRQ声卡、调制解调器等外部设备产生的中断0b10011Supervisor管理程序或监控程序产生的中断0b10111Abort异常中断0b11011Undefined未定义中断0b11111System系统中断SPSR保存的程序状态寄存器,结构与CPSR完全一样,用来保存CPSR的值。以便出现异常时恢复CPSR的值(3)流水线对pc值的影响CPU内部的组成部分:指令寄存器,指令译码器,指令执行单元(包括ALU和通用寄存器组)CPU执行指令的步骤:取指-译码-执行取指:将指令从内存或指令cache中取入指令寄存器译码:指令译码器对指令寄存器中的指令进行译码操作,辨识add,或是sub等操作执行:指令执行单元根据译码的结果进行运算并保存结果流水线操作:并发多条流水线(以3条为例)1取指译码执行2取指译码执行3取指译码执行提高时间效率(三)、学习内容1.汇编(对裸板机的控制,以及驱动程序控制)2.内核移植(uboot移植、内核编译、文件系统移植、应用程序移植)3.驱动程序编写//^^^^^^^^^^^^^^^^^^^^^^^^^^下午^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^(四)、ADS的使用ADS是汇编或C语言编译调试工具可生成的文件:.axf含调试信息的可执行ELF文件.bin可烧写的二进制映像文件.hex可烧写的十六进制映像文件ADS配置在磁盘中新建一个目录D:\arm,用来存储所写的代码点击目录:File-new,创建一个可执行的ARM映象工程ARMExecutableImage生成ELF格式映像(bin)ARMObjectLibrary生成armar格式目标库文件EmptyProject创建不包含任何库或源文件的工程MakefileImporterWizard用于VcThumbARMInterworkingImage用于ARM和thumb指令混合代码生成的ELF映像ThumbExecutableimage用thumb指令生成ELF格式映像ThumbObjectLibrary用于Thumb指令的代码生成的armar格式文件选ARMExecutableImage,工程文件名2440ART加源文件project-AddFiles新建填加已有生成目标的配置2440ART.mcp内双击TargetS
本文标题:arm汇编编程(示例)
链接地址:https://www.777doc.com/doc-7292623 .html