ARM体系结构与编程 - 第一章 ARM概述及其基本编程模型
2009-06-19 18:25
405 查看
ARM芯片具有RISC体系的一般特点,如:
具有大量的寄存器. 绝大多数操作都在寄存器中进行,通过Load/Store的体系结构在内存和寄存器之间传递数据. 寻址方式简单 采用固定长度的指令格式.
除此之外, ARM体系采用了一些技术:
在同一条数据处理指令中包含算术逻辑处理单元处理和移位处理.
使用地址自动增加(减少)来优化程序中循环处理.
Load/Store指令可以批量传输数据,从而提高数据传输的效率.
所有指令都可以根据前面指令执行结果,决定是否执行,以提高指令执行的效率.
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处理器共有37个寄存器 :
31个通用寄存器, 包括程序计数器(PC)在内. 这些寄存器都是32位寄存器. 6个状态寄存器, 这些寄存器都是32位寄存器, 但目前只使用了其中12位. 任意处理器模式下, 可见的寄存器包括15个通用寄存器(R0~R14), 一个或两个状态寄存器及程序计数器(PC).
各模式下寄存器表格:
当处理器模式切换时, 未备份寄存器指的是同一个物理寄存器, 所有可能造成寄存器中数据被破坏.
备份寄存器(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中时, 子程序返回.
程序计数器PC, R15
ARM采用流水线机制, 当正确读取了PC的值时, 该值为当前指令地址加8个字节(也就是当前指令的下两条指令的地址), 由于ARM指令是字对齐的, PC值的第0位和第1位总为0 .
当使用STR/STM保存R15时, 保存的可能是当前指令地址值加8字节, 也可能保存的是当前指令地址加12字节. 取决于芯片具体设计. 尽量避免使用STR/STM指令来保存R15的值.
to be continue.. P14
具有大量的寄存器. 绝大多数操作都在寄存器中进行,通过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
相关文章推荐
- 【arm体系结构与编程】1.概述及其基本编程模型(一)
- arm学习笔记一(arm概述及其基本编程模型)
- arm学习笔记一(arm概述及其基本编程模型)
- arm学习笔记一(arm概述及其基本编程模型)
- 嵌入式ARM系统实战开发(编程模型、指令系统、程序设计、混合编程、驱动开发)视频教程
- (SerialPort)串口编程知识整理:(一)基本概念和项目实践概述
- MapReduce 2.0应用场景和原理、基本架构和编程模型
- 第一节 UNIX概述及其编程套件
- 【离散数学】第一章 命名逻辑的基本概念(1.2 命题公式及其赋值 )
- 一、Linux网络编程-TCP/IP基础(一)ISO/OSI参考模型、TCP/IP四层模型、基本概念
- 深度神经网络概述:从基本概念到实际模型和硬件基础
- 《C#并发编程经典实例》学习笔记-第一章并发编程概述
- 【黑马程序员】黑马入学准备篇:网络编程之 基本概述
- Java基础-网络编程(概述、网络模型、TCP和UDP)
- 第一章java基本语法概述
- 文章3:libcurl基本编程概述
- java网络编程——第一章 基本网络概念
- SQL笔记 --- 数据库发展,基本概念,关系数据库理论,关系模型,SQL概述
- python计算机视觉编程——第一章(基本的图像操作和处理)
- 嵌入式ARM系统实战开发(编程模型、指令系统、程序设计、混合编程、驱动开发)