您的位置:首页 > 编程语言

ARM体系结构与编程 - 第一章 ARM概述及其基本编程模型

2009-06-19 18:25 405 查看
ARM芯片具有RISC体系的一般特点,如:

具有大量的寄存器. 绝大多数操作都在寄存器中进行,通过Load/Store的体系结构在内存和寄存器之间传递数据. 寻址方式简单 采用固定长度的指令格式.
除此之外, ARM体系采用了一些技术:

在同一条数据处理指令中包含算术逻辑处理单元处理和移位处理.

使用地址自动增加(减少)来优化程序中循环处理.

Load/Store指令可以批量传输数据,从而提高数据传输的效率.

所有指令都可以根据前面指令执行结果,决定是否执行,以提高指令执行的效率.

1.2 ARM体系结构的版本及命令方法

ARM指令集: 分为6个版本 Thumb指令集: 是将ARM指令集的一个子集重新编程而形成的一个指令集. ARM指令长度为32位, Thumb指令长度位为16位. M变种: 长乘法指令, 增加了两条用于进行长乘法操作的ARM指令 E变种: 增强型DSP指令. T变种: Thumb指令集 J变种: Java加速器 Jazelle SIMO变种: ARM媒体功能扩展
1.3 ARM处理器系列

ARM7 ARM9 ARM9E ARM10E SecurCore Xscale StrongARM
1.4 ARM处理器模式

用户模式(User,usr) : 正常程序执行的模式 快速中断模式(FIQ,fiq) : 用于高速数据传输和通道处理 外部中断模式(IRQ,irq) : 用于通常的中断处理 特权模式(Supervisor, sve) : 供操作系统使用的一种保护模式 数据访问中止模式(Abort,abt) : 用于虚拟存储及存储保护 未定义指令中止模式(Undefined,und) : 用于支持通过软件方针硬件的协处理器 系统模式(System,sys) : 用于运行特权级的操作系统任务
处理器模式可以通过软件来切换,在ARM Linux操作系统中,只有运行在内核态的程序才有可能更改处理器模式,用户态的程序是不能访问受操作系统保护的系统资源的,更不能直接进行处理器模式的切换。当需要处理器模式切换的时候,用户态的程序可以中断,内核态的中断处理程序开始响应并做出处理。 以上7种模式对应了系统中的中断向量表,这在移植操作系统的时候很重要。系统中所有的调度都是围绕着中断向量表展开的,在不用操作系统的系统中也就是通常所谓的裸机系统程序中,对于中断向量表的处理也很关键。这个向量表一般加载在CPU复位执行的开始地址的一段空间。在ARM Linux操作系统中,Boot Loader程序的移植中需要考虑这些问题,而一旦Boot Loader移植成功,运行起来以后,开发人员就不需要再考虑这个问题了。

1.5 ARM寄存器介绍

ARM处理器共有37个寄存器 :

31个通用寄存器, 包括程序计数器(PC)在内. 这些寄存器都是32位寄存器. 6个状态寄存器, 这些寄存器都是32位寄存器, 但目前只使用了其中12位. 任意处理器模式下, 可见的寄存器包括15个通用寄存器(R0~R14), 一个或两个状态寄存器及程序计数器(PC).
各模式下寄存器表格:

1.5.1 通用寄存器

未备份寄存器(The unbanked registers) , R0~R7
当处理器模式切换时, 未备份寄存器指的是同一个物理寄存器, 所有可能造成寄存器中数据被破坏.
备份寄存器(The banked registers) , R8~R14

对于R8~R12, 每个寄存器对应2个不同的物理寄存器. 如: 快速模式下, R8对应R8_fiq; 用户模式下, R8对应R8_usr. 这两种情况下, 使用的是不同的物理寄存器.

对于R13,R14, 每个寄存器对应6个不同的物理寄存器. 其中用户模式和系统模式下是共用一个物理寄存器. 其它5种处理器模式分别使用: R13_<mode>, R14_<mode>来表式.

R13在ARM中常用作栈指针. 每一种异常模式拥有自己的物理R13. 应用程序去初始化该R13, 使其指向该异常模式专用的栈地址.

R14又称连接寄存器(Link Register, LR), 在ARM中有以下2个作用
1) 每种模式有自己的物理R14, 存放当前子程序的返回地址. 当通过BL或BLX指令调用子程序时, R14被设置成该子程序的返回地址. 子程序中, 当把R14的值复制到程序计数器PC中时, 子程序返回.

例: 

MOV PC , LR    #把R14的值复制到程序计数器PC中

BX LR             #

STMFD SP! , { <registers>,LR }   #在子程序入口将PC保存到栈中
LDMFD SP!, { <registers>,PC }    #子程序返回
2) 异常中断发生时, 该异常模式特定的物理R14被设置成该异常模式将要返回的地址.

程序计数器PC, R15

ARM采用流水线机制, 当正确读取了PC的值时, 该值为当前指令地址加8个字节(也就是当前指令的下两条指令的地址), 由于ARM指令是字对齐的, PC值的第0位和第1位总为0 .

当使用STR/STM保存R15时, 保存的可能是当前指令地址值加8字节, 也可能保存的是当前指令地址加12字节. 取决于芯片具体设计. 尽量避免使用STR/STM指令来保存R15的值.

to be continue.. P14
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: