`

arm学习笔记一(arm概述及其基本编程模型)

 
阅读更多

arm概述及其基本编程模型
arm体系结构的版本及命名方法


arm体系统构的6个版本的特点


arm体系的变种


1 thumb指令集(t变种)
2 长乘法指令(M变种)
3 增强型dsp指令(E变种)
4 java加速器jazelle(J变种)
5 arm媒体功能扩展(SIMD变种)




arm/thumb体系版本的命名格式
1 字符串ARMv
2 ARM指令的版本号 1-6
3 表示变种的字符 版本4之后M变种成为标准功能,不需要列出来
4 使用x表示排除某种写功能


arm处理器系列
arm7
arm9
arm9e
arm920T ARM922T ARM9440T
arm10e
securCore
intel的Xscale
intle的StrongARM


ARM处理器模式
7种运行模式
用户模式(User,usr) 正常程序执行的模式
快速中断模式(FIQ,fiq) 用于高速数据传输和通道处理
外部处理中断模式(IRQ,irq) 用于通常的中断处理
特权模式(Supervisor,sve) 供操作系统使用的一种保护模式
数据访问中止模式(Abort,abt) 用于虚拟存储及存储保护
未定指令中上模式(Undefine,und) 用于支持通过软件方针硬件的协处理器
系统模式(System,sys) 用于运行特权级的操作系统任务


各种处理模式下的寄存器


工作模式可以通过软件改变,也可以通过外部中断或异常处理改变


用户模式以外的模式称为非用户模式,特权模式(privileged modes)
用户模式和系统模式以外的模式称为异常模式(exception modes)


arm寄存器介绍
arm共有37个寄存器
31个通用寄存器
分为以下三类:
未备份寄存器(the unbanked registers) r0-r7
指的都是同一个物理寄存器
任何采用通用寄存器的应用的场合都可以使用
备份寄存器(the banked registers) r8-r14
r8-r12每个寄存器对应两个不同的物理寄存器
r13-r14每个寄存器对应6个不同的物理寄存器,一个是用户模式和系统模式共用,另外5个对应于其他5种处理模式,使用R13_<mode>来区分物理寄存器
mode可以是以下几种模式:usr svc abt und irq和fiq
r13常用作栈指针sp
r14又被称为连接寄存器lr,两种特列的作用
存入当前程序的返回地址
示例代码:
MOV PC ,LF
BX LR
在子程序入口使用下面的指令将PC保存到栈中
STMFD SP! ,{<REGISTERS>,IR}
子程序返回
LDMFD SP!,{<gefisters>,PC}
当异常中断发生时,设置成该异常模式将要返回的地址

程序计数器PC r15
pc 指向当前指令的下两条指令的地址,第0位和第1位总为0
尽量避免使用STR/STM指令来保存R15


6个状态寄存器
CPSR(当前状态寄存器),可以在任何处理模式下被访问
每一个处理模式下都有一个物理状态寄存器(用户模式和异常中断模式除外),SPSR(备份程序状态寄存器),在特定的异常驻中断发生时,存放当前状态寄存器的内容.


cpsr的格式如下:
31 30 29 28 27 26 7 6 5 4 3 2 1 0
N Z C V Q DNM(RAZ) I F T M4 M3 M2 M1 M0


条件标志位
N(negative) z(zero) c(carry) v(overflow)
arm指令根据cpsr中的条件标志位来选择性的执行,


影响条件标志位的指令
比较指令 cmp cmn teq tst
算术指令和逻辑指令的目标寄存器不是r15时
msr指令可以向cpsr/spsr中写入新值
ldm指令的变种可以将spsr的值复制到cpsr中
一些带"位设置"的算术和逻辑指令的变种


Q标志位
用于指示增强的dsp指令是否发生了溢出
cpsr的bit[27]
spsr的bit[27]
arm v5以前或非e系列的处理器,q标志位没有被定义


cpsr中的控制位
cpsr的低8位I F T M[4:0]


中断禁止位
当I=1时禁止IRQ中断
当F=1时禁止FIQ中断


T控制位用于控制指令的执行状态(说明本指令是arm指令还是thumb指令)
arm v4 t系列
T=0 表arm指令
T=1 表thumb指令
arm v5 非t系列
t=0 表arm指令
t=1 表强制下一条执行的指令产生未定义指令中断


M控制位 控制处理器模式
M[4:0] 处理器模式 可以访问的寄存器
0b10000 user pc r14-r0 cpsr
0b10001 fiq pc r14_fiq-r8_fiq r7-r0 cpsr spsr_fiq
0b10010 irq pc r14_irq-r13_irq r12-r0 cpsr spsr_irq
0b10011 supervisor pc r14_svc-r13_svc r12-r0 cpsr spsr_svc
0b10111 abort pc r14_abt-r13_abt r12-r0 cpsr spsr_abt
0b11011 undefined pc r14_und-r8_und r12-r0 cpsr spsr_und
0b11111 system pc r14-r0 cpsr


arm体系的异常中断
arm体系有三种方式控制程序的执行流程
1 正常程序执行过程中,每执行一条arm指令,程序计数寄存器(pc)的值加4个字 节;执行一条thumb指令,加两个字节
2 通过跳转指令,跳到特定的地址标号处执行,或特定子程序执行,
b指令执行跳转操作
bl指令执行跳转,保存子程序的返回地址
bx指令执行跳转,根据目标地址的最低位可以将程序状态切换到thumb状态
blx是以上两个指令的叠加

分享到:
评论

相关推荐

    《ARM SoC体系结构》学习笔记[中英对照]

    ### ARM SoC体系结构概述 在探讨ARM System-on-Chip (SoC)体系结构之前,我们首先需要了解一些基本的概念,比如通用处理器、存储程序计算机以及它们如何与现代电子器件如晶体管相互作用。 #### 通用处理器 通用...

    arm学习报告一二三

    总之,ARM架构的学习涵盖了硬件原理、指令集、编程模型等多个方面,通过实践项目和学习报告,我们可以深入理解这一技术,并提升在相关领域的开发能力。而“UCGUI专业论坛简介”则为嵌入式图形界面设计提供了额外的...

    ARM学习入门

    本篇文章将根据"ARM学习入门"的主题,结合提供的“ARM入门笔记.pdf”,帮助初学者深入理解ARM的基本概念、工作原理和应用实践。 一、ARM架构概述 ARM是一种精简指令集计算(RISC)架构,由英国ARM公司设计。它以...

    arm开发的详细讲解,很全的

    ARM开发详解是一个全面涵盖ARM架构及其应用开发的学习资源集合,非常适合对嵌入式系统和微处理器感兴趣的初学者或进阶者。以下是对每个文件内容的详细解析: 1. **第1章 ARM微处理器概述.pdf**:这一章节通常会介绍...

    CC3200学习笔记_CC3200学习笔记_Cc3200_

    **CC3200学习笔记概述** CC3200是一款由Texas Instruments(TI)公司推出的高性能、单芯片Wi-Fi微控制器,适用于物联网(IoT)应用。它集成了一个ARM Cortex-M4 CPU和强大的无线连接功能,为开发者提供了一个强大而...

    STM32入门与学习笔记 20181125

    通过深入学习STM32的硬件结构、编程模型以及实际应用,开发者能够熟练掌握STM32微控制器,为各类嵌入式项目打下坚实基础。《STM32入门与学习笔记.pdf》应包含了上述知识点的详细讲解,建议读者结合实际操作,逐步...

    vxworks学习笔记

    本学习笔记将深入探讨VxWorks的基础概念、核心组件以及如何进行系统开发。 一、VxWorks概述 VxWorks以其高效的实时性、稳定性及强大的网络功能著称。它提供了微内核结构,允许开发者根据需求选择必要的服务,以降低...

    ARM9嵌入式系统设计基础教程 电子课件_第8章 嵌入式系统-教程与笔记习题

    5. **编程模型与工具链**:学习者将了解在ARM9平台上进行软件开发所使用的编程语言(如C/C++)、编译器、调试器以及交叉编译环境。 6. **实验与实践**:课程可能包含一些实际操作的实验,例如设置开发环境、编写和...

    linux设备驱动书籍详细说明

    因此,他计划一边阅读书籍一边进行编程实践,并且撰写学习笔记以巩固所学知识。 ### 3. 实践环境配置 - **交叉编译**:因为作者主要关注的是ARM-Linux领域,所以所有的编译都采用交叉编译的方式完成。 - **内核...

    LPC23xx/24xx程序

    本文将深入探讨这个系列的程序设计,包括其基本结构、开发环境、编程模型以及实例解析。 一、LPC23xx/24xx概述 LPC23xx/24xx微控制器集成了丰富的外设接口,如UART、SPI、I2C、PWM、ADC等,同时具有多个定时器和...

    周立功LPC2300应用技术笔记(下册)

    3. **编程模型与开发环境**:书中详细讲解了LPC2300的编程模型,包括中断服务程序、存储器映射、中断向量表等。同时,还介绍了如何设置开发环境,如使用Keil uVision或者IAR Embedded Workbench进行项目构建和调试。...

    keilG-maste笔记

    【keilG-maste笔记】是关于使用Keil μVision集成开发环境...以上就是对【keilG-maste笔记】中主要知识点的概述,通过这些步骤和技巧,开发者可以高效地使用Keil μVision进行C语言编程,实现对嵌入式系统的精确控制。

    嵌入式linux开发基础笔记

    了解各种编程模型,如POSIX接口、嵌入式图形库(如Qt、GTK+)和网络编程,对于开发高效的应用至关重要。 九、调试与优化 在开发过程中,使用GDB进行远程调试,使用strace和syslog分析系统调用和日志,可以帮助定位...

    GD32F30xFFPRGU6和GD32F10x编程资料

    4. **软件开发工具**:推荐的IDE、编译器、调试器等,并提供编程模型和内存布局的指导。 5. **应用示例**:包含一些基础和复杂的实例,帮助开发者快速理解和应用GD32F10x的特性。 6. **故障处理和兼容性**:讨论可能...

    STM32FXX C程序分享

    6. **编程模型**:理解STM32的中断服务结构、存储模型、异常处理等是C编程的关键。例如,理解中断向量表的配置,掌握如何在中断服务函数中处理事件。 7. **调试技巧**:学会使用仿真器或JTAG接口进行硬件调试,通过...

    UG585(Zynq-7000 Soc 技术参考手册)

    手册还列举了一系列相关的文档资源,包括用户指南、数据手册、应用笔记等,帮助开发者深入学习和掌握 Zynq-7000 SoC 的使用方法。 **1.1.3 注意事项** 手册特别强调了一些重要的注意事项,如电源管理、信号完整性...

    aduc7026单片机开发板资料软件例程源码硬件参考设计及相关技术文档资料.zip

    在学习和使用ADUC7026的过程中,开发者需要结合这些资料逐步理解单片机的内部结构、操作流程和编程模型。同时,不断实践和调试,将理论知识转化为实际技能,才能在项目开发中游刃有余。这份资料包为ADUC7026的初学者...

    VxWorks手册

    一、VxWorks概述 VxWorks以其微秒级别的响应时间和强大的实时性能著称,广泛应用于航空航天、工业自动化、通信设备和医疗设备等领域。它支持多种处理器架构,如Intel x86、ARM、PowerPC等,并提供了丰富的软件库和...

    Professional Linux Kernel Architecture

    - **学习目标**:理解设备驱动模型,掌握编写高质量驱动程序的方法。 7. **第7章:模块** - **主要内容**:讲解Linux内核模块的工作原理及其实现细节。 - **学习目标**:学会如何编写可动态加载的内核模块,了解...

    STM32H7相关资料,包括Allegro库,参考设计,中文手册等

    STM32H7系列是意法半导体(STMicroelectronics)推出的高性能微控制器,它基于ARM Cortex-M7内核,提供了一系列先进的特性和功能,适用于多种嵌入式应用。本资料包包含与STM32H7相关的多种资源,帮助开发者深入理解...

Global site tag (gtag.js) - Google Analytics