- 1、本文档共128页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ARM处理器及嵌入式C语言 第二章 ARM编程模型和指令集介绍 2.1 ARM编程模型 2.1.1 指令长度及数据类型 指令集可以是以下任一种 32 bits 长 (ARM状态) 16 bits 长 (Thumb状态) ARM7TDMI 支持3种数据类型 字节 (8-bit) 半字 (16-bit) 字 (32-bit) 字必须被排成4个字节边界对齐,半字必须被排列成2个字节边界对齐 2.1.2 ARM处理器的工作状态 ARM微处理器的工作状态一般有两种: ARM状态—处理器执行32位的字对齐的ARM指令; Thumb状态—处理器执行16位的、半字对齐的Thumb指令。 ARM和Thumb指令集均有切换处理器状态的指令,在程序的执行过程中,处理器可以随时在两种状态之间切换,并且处理器工作状态的转变并不影响处理器的工作模式和相应寄存器中的内容,但是有些场合中系统只能使用ARM指令。 只能使用ARM指令的场合: 1.如果对于速度有比较高的要求,ARM指令在宽存储器中会提供更高的性能; 2.某些功能只能由ARM指令来实现,比如:访问CPSR寄存器来使能/禁止中断或者改变处理器工作模式;访问协处理器CP15;执行C代码不支持的DSP算术指令; 3.异常中断(Exception)处理。在进入异常中断后,内核自动切换到ARM状态。即在异常中断处理程序入口的一些指令是ARM指令,然后根据需要程序可以切换到Thumb状态,在异常中断处理程序返回前,程序再切换到ARM状态。 4. ARM处理器总是从ARM状态开始执行。因而,如果要在调试器中运行Thumb程序,必须为该Thumb程序添加一个ARM程序头,然后再切换到Thumb状态,调用该Thumb程序。 Thumb状态和ARM状态切换的实现: BX Rn Rn可以是寄存器R0—R15中的任意一个,指令可以通过将寄存器Rn的内容拷贝到程序计数器PC来完成在4Gbyte地址空间中的绝对跳转,而状态切换是由寄存器Rn的最低位来指定的,如果操作数寄存器的状态位Bit0=0,则进入ARM状态,如果Bit0=1,则进入Thumb状态 。 Thumb状态和ARM状态切换的实现: CODE32 //ARM状态下的代码 LDR R0, =Into_Thumb+1 //产生跳转地址并且设置最低位 BX R0 //Branch Exchange 进入Thumb状态 … CODE16 //Thumb状态下的子函数 Into_Thumb … LDR R3, =Back_to_ARM //产生字对齐的跳转地址,最低位被清除 BX R3 //Branch Exchange 返回到ARM状态 … CODE32 //ARM状态下的子函数 Back_to_ARM … 2.1.3 ARM体系结构的存储器格式 ARM体系结构将存储器看作是从0地址开始的字节的线性组合。从0字节到3字节放置第一个存储的字数据,从第4个字节到第7个字节放置第二个存储的字数据,依次排列。作为32位的微处理器,ARM体系结构所支持的最大寻址空间为4GB。 ARM体系结构可以用两种方法存储字数据,称之为大端格式和小端格式。 2.1.4 处理器模式 ARM处理器支持7种运行模式: 2.1.5 寄存器组织 ARM处理器共有37个32位的寄存器,其中包括1个用作PC、一个用作CPSR、5个用作SPSR和30个通用寄存器,在ARM状态下,任意时刻可编程访问的有16个通用寄存器和1-2个状态寄存器。 寄存器被安排成部分重叠的组。在不同的工作模式和处理器状态下,程序员可以访问的寄存器也不尽相同。 分组的寄存器在处理器异常和特权操作时可得到快速的上下文切换。 异常发生时,程序要跳转至异常服务程序,对返回地址的处理与子程序调用类似,都是由硬件完成的。区别在于有些异常有一个小常量的偏移。 当发生异常嵌套时,这些异常之间可能会发生冲突。 例如:如果用户在用户模式下执行程序时发生了IRQ中断,用户模式寄存器不会被破坏。但是如果允许在IRQ模式下的中断处理程序重新使能IRQ中断,并且发生了嵌套的IRQ中断时,外部中断处理程序保存在R14_i
文档评论(0)