汇编及嵌入式c语言第二章ppt培训课件

上传人:aa****6 文档编号:58008249 上传时间:2018-10-26 格式:PPT 页数:128 大小:1.43MB
返回 下载 相关 举报
汇编及嵌入式c语言第二章ppt培训课件_第1页
第1页 / 共128页
汇编及嵌入式c语言第二章ppt培训课件_第2页
第2页 / 共128页
汇编及嵌入式c语言第二章ppt培训课件_第3页
第3页 / 共128页
汇编及嵌入式c语言第二章ppt培训课件_第4页
第4页 / 共128页
汇编及嵌入式c语言第二章ppt培训课件_第5页
第5页 / 共128页
点击查看更多>>
资源描述

《汇编及嵌入式c语言第二章ppt培训课件》由会员分享,可在线阅读,更多相关《汇编及嵌入式c语言第二章ppt培训课件(128页珍藏版)》请在金锄头文库上搜索。

1、ARM处理器 及嵌入式C语言,第二章 ARM编程模型和指令集介绍,2.1 ARM编程模型 2.1.1 指令长度及数据类型 指令集可以是以下任一种 32 bits 长 (ARM状态) 16 bits 长 (Thumb状态),特别说明:Thumb指令集可以看作是ARM指令压缩形式 的子集,它是为减小代码量而提出,具有16bit的代码 密度。Thumb指令体系并不完整,只支持通用功能,必 要时仍需要使用ARM指令,如进入异常时。其指令的 格式与使用方式与ARM指令集类似,而且使用并不频繁, Thumb指令集作一般了解。,ARM7TDMI 支持3种数据类型 字节 (8-bit) 半字 (16-bit)

2、 字 (32-bit) 字必须被排成4个字节边界对齐,半字必须被排列成2个字节边界对齐,2.1.2 ARM处理器的工作状态 ARM微处理器的工作状态一般有两种: ARM状态处理器执行32位的字对齐的ARM指令; Thumb状态处理器执行16位的、半字对齐的Thumb指令。 ARM和Thumb指令集均有切换处理器状态的指令,在程序的执行过程中,处理器可以随时在两种状态之间切换,并且处理器工作状态的转变并不影响处理器的工作模式和相应寄存器中的内容,但是有些场合中系统只能使用ARM指令。,只能使用ARM指令的场合: 1.如果对于速度有比较高的要求,ARM指令在宽存储器中会提供更高的性能; 2.某些功

3、能只能由ARM指令来实现,比如:访问CPSR寄存器来使能/禁止中断或者改变处理器工作模式;访问协处理器CP15;执行C代码不支持的DSP算术指令; 3.异常中断(Exception)处理。在进入异常中断后,内核自动切换到ARM状态。即在异常中断处理程序入口的一些指令是ARM指令,然后根据需要程序可以切换到Thumb状态,在异常中断处理程序返回前,程序再切换到ARM状态。 4. ARM处理器总是从ARM状态开始执行。因而,如果要在调试器中运行Thumb程序,必须为该Thumb程序添加一个ARM程序头,然后再切换到Thumb状态,调用该Thumb程序。,Thumb状态和ARM状态切换的实现: BX

4、 Rn Rn可以是寄存器R0R15中的任意一个,指令可以通过将寄存器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_AR

5、M /产生字对齐的跳转地址,最低位被清除 BX R3 /Branch Exchange 返回到ARM状态 CODE32 /ARM状态下的子函数 Back_to_ARM ,2.1.3 ARM体系结构的存储器格式 ARM体系结构将存储器看作是从0地址开始的字节的线性组合。从0字节到3字节放置第一个存储的字数据,从第4个字节到第7个字节放置第二个存储的字数据,依次排列。作为32位的微处理器,ARM体系结构所支持的最大寻址空间为4GB。 ARM体系结构可以用两种方法存储字数据,称之为大端格式和小端格式。,小端格式,大端格式,问题:32bits宽的数0x12345678存放 在0xb00d40000xb

6、00d4003存 储器中,在大端模式如何放置? 在小端模式又如何放置?,2.1.4 处理器模式 ARM处理器支持7种运行模式:,除用户模式外,其它模式均为特权模式。ARM内部寄存器和一些片内外设在硬件设计上只允许(或者可选为只允许)特权模式下访问。此外,特权模式可以自由的切换处理器模式,而用户模式不能直接切换到别的模式。,这五种模式称为异常模式。它们除了可以通过程序切换进入外,也可以由特定的异常进入。当特定的异常出现时,处理器进入相应的模式。每种异常模式都有一些独立的寄存器,以避免异常退出时用户模式的状态不可靠。,这两种模式都不能由异常进入,而且它们使用完全相同的寄存器组。 系统模式是特权模式

7、,不受用户模式的限制。操作系统在该模式下访问用户模式的寄存器就比较方便,而且操作系统的一些特权任务可以使用这个模式访问一些受控的资源。,2.1.5 寄存器组织 ARM处理器共有37个32位的寄存器,其中包括1个用作PC、一个用作CPSR、5个用作SPSR和30个通用寄存器,在ARM状态下,任意时刻可编程访问的有16个通用寄存器和1-2个状态寄存器。 寄存器被安排成部分重叠的组。在不同的工作模式和处理器状态下,程序员可以访问的寄存器也不尽相同。 分组的寄存器在处理器异常和特权操作时可得到快速的上下文切换。,所有的37个寄存器,分成两大类: 31个通用32位寄存器; 6个状态寄存器。,在汇编语言中

8、寄存器R0R13为保存数据或地址值的通用寄存器。它们是完全通用的寄存器,不会被体系结构作为特殊用途,并且可用于任何使用通用寄存器的指令。,其中R0R7为未分组的寄存器,也就是说对于任何处理器模式,这些寄存器都对应于相同的32位物理寄存器。,寄存器R8R14为分组寄存器。它们所对应的物理寄存器取决于当前的处理器模式,几乎所有允许使用通用寄存器的指令都允许使用分组寄存器,寄存器R8R12有两个分组的物理寄存器。一个用于除FIQ模式之外的所有寄存器模式,另一个用于FIQ模式。这样在发生FIQ中断后,可以加速FIQ的处理速度。,寄存器R13、R14分别有6个分组的物理寄存器。一个用于用户和系统模式,其

9、余5个分别用于5种异常模式。,寄存器R13常作为堆栈指针(SP)。在ARM指令集当中,没有以特殊方式使用R13的指令或其它功能,只是习惯上都这样使用。但是在Thumb指令集中存在使用R13的指令。,R14为链接寄存器(LR),在结构上有两个特殊功能: 在每种模式下,模式自身的R14版本用于保存子程序返回地址; 当发生异常时,将R14对应的异常模式版本设置为异常返回地址(有些异常有一个小的固定偏移量)。,MOV PC,LR,R14(地址A),1.程序A执行过程中调用程序B;,操作流程,2.程序跳转至标号Lable,执行程序B。同时硬件将“BL Lable”指令的下一条指令所在地址存入R14;,3

10、.程序B执行最后,将R14寄存器的内容放入PC,返回程序A;,R14寄存器与子程序调用,R14寄存器与异常发生,异常发生时,程序要跳转至异常服务程序,对返回地址的处理与子程序调用类似,都是由硬件完成的。区别在于有些异常有一个小常量的偏移。 当发生异常嵌套时,这些异常之间可能会发生冲突。 例如:如果用户在用户模式下执行程序时发生了IRQ中断,用户模式寄存器不会被破坏。但是如果允许在IRQ模式下的中断处理程序重新使能IRQ中断,并且发生了嵌套的IRQ中断时,外部中断处理程序保存在R14_irq中的任何值都将被嵌套中断的返回地址所覆盖。,a,return,地址A,1.执行用户模式下的程序;,2.发生

11、IRQ中断,硬件将某个地址存入IRQ模式下的R14_irq寄存器,用户模式下的R14没有被破坏;,3. IRQ服务程序A执行完毕,将R14_irq寄存器的内容减去某个常量后存入PC,返回之前被中断的程序;,未被破坏,a,地址A,1.执行用户模式下的程序;,2.发生IRQ中断,硬件将某个地址存入IRQ模式下的R14_irq寄存器,用户模式下的R14没有被破坏;,3. IRQ服务程序A执行完毕,将R14_irq寄存器的内容减去某个常量后存入PC,返回之前被中断的程序;,未被破坏,a,return,地址B,4. 如果在IRQ处理程序中打开IRQ中断,并且再次发生IRQ中断,或者调用子程序;,5. 硬

12、件将返回地址保存在R14_irq寄存器中,原来保存的返回地址将被覆盖,造成错误;,被破坏,6. 在程序B返回到程序A,然后在返回到用户模式下被中断的程序时,发生错误,将不能正确返回;,return,return,解决办法:确保R14的对应版本在发生中断嵌套时不再保存任何有意义的值(将R14入栈),或者切换到其它处理器模式下。,寄存器R15为程序计数器(PC),它指向正在取指的地址。可以认为它是一个通用寄存器,但是对于它的使用有许多与指令相关的限制或特殊情况。如果R15使用的方式超出了这些限制,那么结果将是不可预测的。,读R15的限制,正常操作时,从R15读取的值是处理器正在取指的地址,即当前正

13、在执行指令的地址加上8个字节(两条ARM指令的长度)。由于ARM指令总是以字为单位,所以R15寄存器的最低两位总是为0。,读R15的限制,当使用STR或STM指令保存R15时,会有一个例外。这些指令可能将当前指令地址加8字节或加12字节保存(将来可能还有其它数字)。偏移量是8还是12取决于具体的ARM芯片,但是对于一个确定的芯片,这个值是一个常量。 所以最好避免使用STR和STM指令来保存R15,如果很难做到,那么应当在程序中计算出该芯片的偏移量。,读R15的限制,计算偏移量程序代码:,SUB R1,PC,#4 ;R1=下面STR指令的地址 STR PC,R0 ;保存STR指令地址+偏移量 L

14、DR R0,R0 ;然后重装 SUB R0,R0,R1 ;计算偏移量,读R15的限制,正常操作时,写入R15 的值被当作一个指令地址,程序从这个地址处继续执行(相当于执行一次无条件跳转)。,读R15的限制,由于ARM指令以字节为边界,因此写入R15的值最低两位通常为0b00。具体的规则取决于内核结构的版本: 在ARM结构V3版及以下版本中,写入R15的值的最低两位被忽略,因此跳转地址由指令的实际目标地址(写入R15的值)和0xFFFFFFFC相与得到; 在ARM结构V4版及以上版本中,写入R15的值的最低两位为0,如果不是,结果将不可预测。,寄存器CPSR为当前程序状态寄存器,在异常模式中,另外一个寄存器“备份程序状态寄存器(SPSR)”可以被访问。每种异常都有自己的SPSR,在因为异常事件而进入异常时它保存CPSR的当前值,异常退出时可通过它恢复CPSR。,CPSR反映了当前处理器的状态: 个条件代码标志; 2个中断控制位; 5个对当前处理器模式进行编码的位; 1个指示当前执行指令的工作状态位; 保留位。,SPSR:备份程序状态字,保存异常事件发 生之前的CPSR,每个异常模式带有一个备份程序状态寄存器,用于保存在异常事件发生之前的CPSR;CPSR和SPSR通过特殊指令进行访问。,2.1.6 程序状态寄存器CPSR和SPSR,程序状态寄存器CPSR和SPSR,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号