[3]嵌入式系统-arm指令及汇编程序设计剖析

上传人:今*** 文档编号:106900106 上传时间:2019-10-16 格式:PPT 页数:167 大小:4.02MB
返回 下载 相关 举报
[3]嵌入式系统-arm指令及汇编程序设计剖析_第1页
第1页 / 共167页
[3]嵌入式系统-arm指令及汇编程序设计剖析_第2页
第2页 / 共167页
[3]嵌入式系统-arm指令及汇编程序设计剖析_第3页
第3页 / 共167页
[3]嵌入式系统-arm指令及汇编程序设计剖析_第4页
第4页 / 共167页
[3]嵌入式系统-arm指令及汇编程序设计剖析_第5页
第5页 / 共167页
点击查看更多>>
资源描述

《[3]嵌入式系统-arm指令及汇编程序设计剖析》由会员分享,可在线阅读,更多相关《[3]嵌入式系统-arm指令及汇编程序设计剖析(167页珍藏版)》请在金锄头文库上搜索。

1、第三讲 ARM指令及汇编程序设计,编程模型 指令格式 寻址模式 常用指令,1.ARM 编程模型,1.1ARM处理器模式,ARM微处理器支持7种工作模式:用户模式、系统模式、快速中断模式、外部中断模式、管理模式、中止模式、未定义指令模式。 除用户模式之外的其余6种称为非用户模式,或特权模式。 在特权模式中,除系统模式之外的其余5种称为异常模式。 处理器的各种工作模式由当前程序状态寄存器CPSR的低5位M4:0决定。 工作模式切换: (1)发生异常,处理器自动改变CPSR中M4:0的值,进入相应的工作模式; (2)处理器处于特权模式时,用指令向CPSR的M4:0字段写入特定的值,进入相应的工作模式

2、。 用户模式时,不能改变工作模式,除非发生异常。,嵌入式系统原理与应用 2008,ARM处理器7种工作模式,特权模式,除用户模式外,其它模式均为特权模式。ARM内部寄存器和一些片内外设在硬件设计上只允许(或者可选为只允许)特权模式下访问。此外,特权模式可以自由的切换处理器模式,而用户模式不能直接切换到别的模式。,异常模式,这五种模式称为异常模式。它们除了可以通过程序切换进入外,也可以由特定的异常进入。当特定的异常出现时,处理器进入相应的模式。每种异常模式都有一些独立的寄存器,以避免异常退出时用户模式的状态不可靠。,用户和系统模式,这两种模式都不能由异常进入,而且它们使用完全相同的寄存器组。 系

3、统模式是特权模式,不受用户模式的限制。操作系统在该模式下访问用户模式的寄存器就比较方便,而且操作系统的一些特权任务可以使用这个模式访问一些受控的资源。,ARM的寄存器组织,37个寄存器:31个通用寄存器,包括程序计数器PC; 6个状态寄存器。 寄存器均为32位,分成7组,各工作模式拥有自己的寄存器组,只能访问自己的寄存器组。 有些寄存器是重叠的,有些是工作模式特有的。 在不同的工作模式和处理器状态下,程序员可以访问的寄存器不尽相同。,不分组8个,分组22个,PC 1个,2组10个,6组12个,状态6个,通用31个,CPSR,CPSR,CPSR,CPSR,CPSR,SPSR,SPSR,SPSR,

4、SPSR,SPSR,SP,LR,PC,嵌入式系统原理与应用 2008,ARM状态各模式下的寄存器,嵌入式系统原理与应用 2008,堆栈指针寄存器R13(SP),寄存器R13常作为堆栈指针(SP)。在ARM指令集当中,没有以特殊方式使用R13的指令或其它功能,只是习惯上都这样使用。但是在Thumb指令集中存在使用R13的指令。,链接寄存器R14(LR),R14为链接寄存器(LR),在结构上有两个特殊功能: 在每种模式下,模式自身的R14版本用于保存子程序返回地址; 当发生异常时,将R14对应的异常模式版本设置为异常返回地址(有些异常有一个小的固定偏移量)。,嵌入式系统原理与应用 2008,R14

5、(LR)的作用,作用:保存返回地址 例如: 1.程序A执行过程中调用程序B; 2.程序跳转至标号Lable,执行程序B。同时硬件将“BL Lable”指令的下一条指令所在地址存入R14(LR); 3.程序B执行最后,将R14寄存器的内容放入PC,返回程序A;,MOV PC,LR,R14(地址A),嵌入式系统原理与应用 2008,程序计数器R15(PC),寄存器R15为程序计数器(PC),它指向正在取指的地址。可以认为它是一个通用寄存器,但是对于它的使用有许多与指令相关的限制或特殊情况。 正常操作时,从R15读取的值是处理器正在取指的地址,即当前正在执行指令的地址加上8个字节(两条ARM指令的长

6、度)。由于ARM指令总是以字为单位,所以R15寄存器的最低两位总是为0。,嵌入式系统原理与应用 2008,程序状态寄存器CPSR,寄存器CPSR为当前程序状态寄存器,在异常模式中,另外一个寄存器“保存程序状态寄存器(SPSR)”可以被访问。 每种异常都有自己的SPSR,在进入异常时它保存CPSR的当前值,异常退出时可通过它恢复CPSR。,状态寄存器,CPSR:当前程序状态寄存器,可以在任何工作模式下被访问。 SPSR:程序状态保存寄存器,只有在异常模式下,才能被访问;各异常模式拥有自己的SPSR。发生异常时,SPSR保存CPSR的值,格式同CPSR。 状态标志:5个,N符号位,Z零标志,C进位

7、,V溢出位,Q DSP运算溢出位。 控制标志:4个,I中断允许,F快速中断允许,T状态选择,M4:0 处理器工作模式,条件代码标志,保留,控制位,溢出标志 oVerflow,进位或借位扩展 Carry,零 Zero,负或小于 Negative,IRQ禁止 Interrupt,FIQ禁止 Fast,状态位 Thumb,模式位 Mode,N,Z,C,V,I,T,F,Q,条件标志位,控制位,异常中断,异常中断:处理器由于外部或内部的原因,停止执行当前任务,转而处理特定的事件,处理完后返回原程序,继续执行。 当异常发生时,处理器首先自动保存当前状态,即返回地址存入寄存器R14,当前寄存器CPSR存入S

8、PSR中,接着进入相应的工作模式,并执行特定地址的指令。 ARM共有7种类型的异常,不同类型的异常将导致处理器进入不同的工作模式,并执行不同特定地址的指令。,7种类型异常中断,复位:复位异常时,处理器立即停止当前程序,进入禁止中断的管理模式,并从地址0x00000000处开始执行。 未定义指令:当前指令未定义时,便产生未定义指令中断。 软件中断:用户模式下使用指令SWI时,处理器便产生软件中断,进入管理模式,以调用特权操作。 指令预取中止:预取指令的地址不存在,或不允许当前指令访问时,存储器会向处理器发出中止信号;预取指令被执行时才会产生该类异常。 数据访问中止:数据访问指令的地址不存在,或不

9、允许当前指令访问时,产生数据中止异常。 外部中断请求:外部中断请求引脚有效,且CPSR中的I位为0时,产生IRQ异常。 快速中断请求:快速中断请求引脚有效,且CPSR中的F位为0时,产生FIQ异常。,异常向量,异常中断的优先级,复位,当nRESET信号由低变为高电平时,ARM处理器执行下列操作: 1. 强制CPSR中的M4:0变为b10011(管理模式); 2. 置位CPSR中的I和F位; 3. 清零CPSR中的T位; 4. 强制PC从地址0x00开始对下一条指令进行取指; 5. 返回到ARM状态并恢复执行 。,2.ARM 指令的编码格式,2.1语法格式(举例说明): ADD指令的一种实际指令

10、语法格式为: ADDEQS R0,R1,R2; 该指令的编码格式为:,嵌入式系统原理与应用 2008,2.2 ARM指令的助记符(举例说明),ARM指令在汇编程序中用助记符表示,一般ARM指令的助记符格式为: S , 其中: 操作码,如ADD表示算术加操作指令; 决定指令执行的条件域; S 决定指令执行是否影响CPSR寄存器的值; 目的寄存器; 第一个操作数,为寄存器; 第二个操作数(ARMv5参考手册常称为shifter_operand)。 例如,指令 ADDEQS R1,R2,5,2.3 条件域,几乎所有的ARM指令都可以根据当前程序状态寄存器CPSR中标志位的值,有条件地执行。 ARM指

11、令的条件域有16种类型。,0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111,依版本不同,定义不同,条件域(ARMv5参考手册),各类指令编码格式,(ARMv5参考手册),2.4 第二个操作数,ARM指令的基本格式如下:, S ,灵活的使用第2个操作数“operand2”能够提高代码效率。它有如下的形式: #immed_8r常数表达式; Rm寄存器方式; Rm,shift寄存器移位方式; *ARMv5参考手册中一般叫做shifter_operand,#immed_8r常数表达式 该常数必

12、须对应8位位图,即一个8位的常数通过循环右移偶数位得到。,循环右移10位,8位常数,例如: ADD R1,R2,#0x0F (0x103)、(0x104)(0x102),Rm寄存器方式 在寄存器方式下,操作数即为寄存器的数值。 例如: SUB R1,R1,R2,Rm,shift寄存器移位方式 将寄存器的移位结果作为操作数(移位操作不消耗额外的时间),但Rm值保持不变 例如: ADD R1,R1,R1,LSL #3 ;R1=R1+R1*8=9R1 SUB R1,R1,R2,LSR R3 ;R1=R1-(R2/2R3),3.寻址方式,3.1 立即数寻址 3.2 寄存器寻址 3.3 寄存器移位寻址

13、3.4 寄存器间接寻址 3.5 基址变址寻址 3.6 相对寻址 3.7 多寄存器寻址 3.8 块拷贝寻址 3.9 堆栈寻址 3.10 简单的ARM程序,3.1 立即数寻址 在立即数寻址中,操作数本身直接在指令中给出,取出指令也就获得了操作数,这个操作数也称为立即数。 例: ADD R0,R1,5; R0=R15 MOV R0,0x55; R0=0x55 其中:操作数5,0x55就是立即数,立即数在指令中要以“”为前缀,后面跟实际数值。 十六进制数,后加 0x或&,如 #0x3f,#&3f. 二进制数, 后加 0b, 如 #0b1011 十进制数, #后加 0d或缺省,如#0d678,#789

14、如何构造32位立即数?,在指令格式中,第二个操作数有12位: 因此有效立即数immediate可以表示成: =immed_8 循环右移(2rot) 4 bit 移位值 (0-15)乘于2,得到一个范围在0-30,步长为 2的移位值。 因此,将ARM中的立即数称为8位位图。 记住一条准则: “最后8位移动偶数位”得到立即数。,例:,下列命令中,汇编器把立即数转换为移位操作: MOV R0,#4096 ; uses 0x40 ror 26 ADD R1,R2,#0xFF0000 ; uses 0xFF ror 16 带有立即数的MOV 指令的二进制编码为: MOV R0,#0xF200 ;E3A0

15、0CF2. MOV R1,#0x110000 ;E3A01811. MOV R4,#0x12800 ;E3A04B4A.,0xF200 =0xF2循环右移(2*C) 0x110000 =0x11循环右移(2*8) 0x12800 =0x4A循环右移(2*B),只有能够通过此构造方法得到的才是合法的立即数。 合法立即数: 0xFF;0x104(其8位图为0x41);0xFF0;0xFF00 非法立即数: 0x101;0x102;0xFF1 深入理解:一个合法的立即数可能有多种编码方法,将使某些指令的执行产生不同的结果。 如 0x3F0 ARM汇编编译器生成立即数的规则为: 当立即数数值在0到0x

16、FF范围时,令immed_8=,rot=0。 其它情况下,汇编编译器选择使rot数值最小的编码方式。,3.2 寄存器寻址 在寄存器寻址方式下,寄存器的值即为操作数。ARM指令普遍采用此种寻址方式。 例: ADD R0,R1,R2 ; R0=R1R2 MOV R0,R1 ; R0=R1,3.3 寄存器移位寻址 寄存器移位寻址的操作数由寄存器的数值做相应移位而得到。 移位的方式在指令中以助记符的形式给出,而移位的位数可用立即数或寄存器寻址方式表示。 例: ADD R0,R1,R2,ROR 5 ;R0=R1R2循环右移5位 MOV R0,R1,LSL R3 ;R0=R1逻辑左移R3位 移位操作在ARM指令集中不作为单独的指令使用,ARM指令集共有5种位移操作。,ARM指令集的5种位移操作,LSL逻辑左移 :Rx,LSL LSR逻辑右移 : Rx,

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

当前位置:首页 > 高等教育 > 大学课件

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