arm汇编编程(示例)
- 格式:docx
- 大小:51.78 KB
- 文档页数:96
1 / 96
一、arm的认知及基本概念
(一).arm的基本概念
1.什么是arm
arm是一家英国电子公司的名字,全名是Advanced RISC Machine
这家企业设计了大量高性能、廉价、耗能低的RISC(精简指令集)处理器,ARM公司只设计芯片而不生产,它将
技术授权给世界上许多公司和厂商。目前采用arm技术知识产权内核的微处理器,即通常所说的arm微处理器
所以arm也是对一类微处理器的通称。
arm指令集体系版本号(软件)为V1 ~ V7目前V1 ~ V3已很少见。从V4版不再与以前的版本兼容。
arm的CPU系列(硬件)主要有ARM7 ~ ARM11
2.典型的嵌入式处理器
arm 占市场79.5%ARM
mips 占市场13.9%MIPS
microSPARC 占市场3.1%SUN
PowerPc 占市场2.8%IBM
其它占市场0.8%
3. arm的应用范围:
工业控制:
如机床、自动控制等
无线通信:
2 / 96
如手机
网络应用:如电子产品:
如音视频播放噐、机顶盒、游戏机、数码相机、打印机
其它各领域:
如军事、医疗、机器人、xx等
4.计算机体系结构
见图:
xx.xx计算机体系图
xx.xx体系结构
处理器使用同一个存储器,经由同一个总线传输
完成一条指令需要3个步骤:
即取指令->指令译码->执行指令
指令和数据共享同一总线的结构
哈佛体系结构
将程序指令存储和数据存储分开
中央处理器首先到程序指令存储器中读取程序指令。解码后到数据地址,再到相应的数据存储器读取数据,然后执行指令
程序指令存储与数据存储分开,可以使指令和数据有不同的数据宽度。
5.复杂指令集与精简指令集
CISC 复杂指令集:
采用冯.诺依曼体系结构。数据线和指令线分时复用(只能通过一辆车)。
3 / 96
存储器操作指令多汇编程序相对简单指令结束后响应中断CPU电路丰富面积大功耗大
RISC 精简指令集:
采用哈佛体系结构。数据线和指令线分离(同时能通过多辆车)。
对存储器操作有限汇编程序占空间大在适当地方响应中断CPU电路较少体积小功耗低
ARM采用RISC精简指令集
Thumb是ARM体系结构中一种16位的指令集。
从ARMv4T之后,的ARM处理器有一种16-bit指令模式,叫做Thumb,较短的指令码提供整体更佳的编码密度,更有效地使用有限的内存带宽。所有ARM9和后来的家族,包括XScale 都纳入了Thumb 技术。
即ARM有两种指令集:
RIS
C、Thumb
6. arm的思想
1) arm体系的总思想:
在不牺牲性能的同时,尽量简化处理器。同时从体系结构上灵活支持处理器扩展。采用RISC结构。RISC处理器简化了处理器结构,减少复杂功能指令的同时,提高了处理器速度。
ARM及MIPS都是典型的RISC处理器
2) arm的流水线结构
arm处理器使用流水线来增加处理器指令流的速度,这样可以使几个操作同时进行。并使处理和存储器系统连续操作。
4 / 96
arm处理器分为三级:
取指->译码->执行
取指:
指令从存储器中取出
译码:
对指令使用的寄存器进行译码
执行:
从寄存器组中读取寄存器,执行移位和ALU操作,寄存器被写回到寄存器组中
3) ARM处理器支持的类型
字节8位
半字16位
字32位
**所有数据操作都以字为单位
**ARM指令的长度刚好是一个字,Thumb指令长度刚好是半个字
4) ARM处理器状态
ARM处理器内核使用ARM结构,该结构包含32位的ARM指令集和16位Thumb指令集,因此ARM有两种操作状态
ARM状态:32位
Thumb状态:16位
5)处理器模式
5 / 96
ARM处理器共有7种运行模式:
用户:
正常程序工作模式,不能直接切换到其它模式
系统:
用于支持操作系统的特权任务,可以直接切换到其它模式
快xx:
支持高速数据传输及通道处理,FIQ异常响应时进入此模式
xx:
用于通用中断处理,IRQ异常响应时进入此模式
管理:
操作系统保护代码,系统复位和软件中断响应时进入此模式
中止:
用于支持虚拟内存或存储器保护,用于MMU
未定义:
支持硬件协处理器的软件仿真,未定义指令异常响应时进入此模式。
(二)、经典平台硬件组成
见图:
arm硬件组成图
开发板一般是由一块组成的,有核心器件和外围器件接口等,但是有的是由两块板子组成,主版和核心板,主版上主要是外围接口,外围器件等,核心板上主要是核心器件,还有一些晶振电路等
6 / 96
1.核心板(天嵌2440)
CPU处理器S3C2440AL,主频400MHz(最高可达533MHz)
SDRAM内存板载64MBSDRAM(标准配置),32bit数据总线SDRAM时钟频率高达100MHz(支持运行133MHz)
Nand Flash 板载64MB Nand Flash或256MB Nand Flash(标准配置)
Nor Flash 板载2MB Nor Flash(最高可升级到8MB)
CorePower 专业1.25V核心电压供电
Power 核心板采用3.3V供电
Powerled 核心板电源指示灯
核心板接口型号为DC-2.0双列直插
SDRAM:
随机存储器,普遍使用的内存。用作主存。
NOR Flash和NAND Flash是现在市场上两种主要的非易失闪存。
NOR的特点是芯片内执行,应用程序可以直接在flash 闪存内运行,不必再把代码读到系统RAM中。
NAND结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。
2.主板
电源
并口线
复位
RTC电源
7 / 96
RS232电平转换DB9插座
音频IIS,AC97
按键、PS/2与IC接口
数码管
触摸屏
以太网卡
主USB HUB 1转4
3.寄存器
见图:
ARM模块和内核框图
寄存器是中央处理器内的组成部份。
寄存器是有限存贮容量的高速存贮部件,用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。
IR 用于存储指令
PC 用于存储程序运行的地址(即当前指令在内存中的位置)
寄存器是由一个指令的输出或输入可以直接索引到的暂存器群组。所有的计算机指令都是进入寄存器后被直接读取
ARM的汇编编程,本质上就是针对CPU寄存器的编程。
//*******重点需要背讼*************************************************ARM寄存器分为2类:
普通寄存器和状态寄存器
8 / 96
(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跳转到
9 / 96
子程序内,此时将栈区内的子程序返回地址取出保存在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位,每一位数据代表不同的状态。分为三个部分(条件代码标志位、控制位、保留区位)