嵌入式系统原理-第3章剖析

上传人:我** 文档编号:116771157 上传时间:2019-11-17 格式:PPT 页数:29 大小:746KB
返回 下载 相关 举报
嵌入式系统原理-第3章剖析_第1页
第1页 / 共29页
嵌入式系统原理-第3章剖析_第2页
第2页 / 共29页
嵌入式系统原理-第3章剖析_第3页
第3页 / 共29页
嵌入式系统原理-第3章剖析_第4页
第4页 / 共29页
嵌入式系统原理-第3章剖析_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《嵌入式系统原理-第3章剖析》由会员分享,可在线阅读,更多相关《嵌入式系统原理-第3章剖析(29页珍藏版)》请在金锄头文库上搜索。

1、3 ARM93 ARM9汇编语言汇编语言 vARM9微处理器采用的是ARMv4版本的指令集 架构,其指令集代码的格式如: 3.1 3.1 ARM9ARM9指令集指令集 v32位的ARM指令集由14种基本指令类型组成。指 令操作码中的Cond子域是条件域,它表明ARM指 令集中的所有指令是有条件执行的。 v指令执行的条件是根据CPSR寄存器中的状态标志 位和指令的条件域确定,见下表: 寄存器装载及存储类指令 v这类指令是最常用的指令之一。它们把数据从存 储器单元中装载(读入)到微处理器核的寄存器 (即R0R15)中,或者把微处理器核的寄存器 中的数据存储(写入)到存储器单元中。 v(1)单一数据

2、加载/存储指令:LDR/STR v 指令书写格式: v (1)LDR/STR条件码B Rd,Rn v (2)LDR/STR条件码B Rd,Rn,Flexoffset ! v (3)LDR/STR条件码B Rd,label v (4)LDR/STR条件码B Rd,Rn,Flexoffset v下面是几条LDR/STR指令书写的示例: v LDR R2,R5 ;无偏移量,R2R5 v LDREQ R5,R6,#28! v ;(若相等)R5R6+28,R6R6+28 v LDR R8,label v ;加载一个字到R8,该字存于label对应单元处 v STR R1,R3,# -6! ;R1R3,R

3、3R3-6 v STRB R0,R3,-R8 ASR #2 v ;R0的最低字节R3-R8/4单元的低字节 v(2)多数据加载/存储指令:LDM和STM。 v指令书写格式: v LDM/STM条件码类型 Rn!,寄存器列表 v 指令中的类型是指存储器地址变化的方式。也就是说,每加载或者存 储完一个寄存器后,存储器的地址需要自动变化,如何变化则由指令 助记符后面所跟的类型确定。类型可以是下列情况之一: v IA 每次数据传送后存储器的地址加1; v IB 每次数据传送前存储器的地址加1; v DA 每次数据传送后存储器的地址减1; v DB 每次数据传送前存储器的地址减1; v FD 满递减堆栈

4、; v ED 空递减堆栈; v FA 满递增堆栈; v EA 空递增堆栈。 v例如: v STMFD R13!,R0-R12,R14 ;寄存器进栈 v v LDMFD R13!,R0-R12,PC ;寄存器出栈,返回 v 利用STM指令把存储在LR寄存器中的当前PC值保存到存储器中的时 候,同时还保存了CPSR寄存器的值。在用LDM指令重新装载 PC寄 存器的时候,除非设计者在指令中写上相应的符号,否则不会恢复 CPSR的值。所写的符号是在寄存器列表后跟随一个“”符号。 v 例如: v STMFD R13!,R0-R12,R14 ;寄存器进栈 v v LDMFD R13!,R0-R12,PC

5、;寄存器出栈,返回 ,同时恢复CPSR v (3)单一数据交换指令:SWP。 v 该指令完成在寄存器和存储器之间进行数据交换 的功能,其句法如下: v SWP条件码B Rd,Rm,Rn v 若指令助记符中加上可选后缀B,则交换的是字 节数据,否则交换的是字数据。 v 该指令的具体作用是数据从存储单元加裁到Rd 寄存器中,Rm寄存器的内容存储到存储单元中 ,该存储单元的地址是Rn寄存器的值。 影响状态标志位类指令 vCPSR寄存器是ARM9微处理器核中保存状态标 志位的寄存器,其中N、V、C、Z标志是由指令 执行结果确定的。能影响这些标志生成的指令或 读/写CPSR寄存器的指令如下: v (1)

6、ADC,ADD,SBC,SUB,RSC和RSB指令; v (2)AND,ORR,EOR和BIC指令; v (3)MOV和MVN指令; 注:MOV和MVN是寄存器与寄存器间的传送指令。若R15是目的寄存 器,则会修改程序计数器PC的值或标志。这一点可被用于子程序返 回,方法是把链接寄存器R14的内容传送到R15中。 v (4)MUL和MLA指令; v (5)MRS和MSR指令。 注:MRS:只能完成CPSR寄存器和SPSR寄存器的读操作; MSR:只能完成CPSR寄存器和SPSR寄存器的写操作。 比较类指令比较类指令 v(1)CMP和CMN指令 CMP条件码 Op1,Op2 该条指令的功能如下:

7、状态位 = Op1 - Op2的结果。 CMN:与取负的数比较指令 CMN条件码 Op1,Op2 该条指令的功能如下:状态位 = Op1 -(- Op2)的结果。 v(2)TST和TEQ指令 TST条件码 Op1,Op2 该条指令的功能如下:状态位 = Op1 AND Op2的结果。 TEQ条件码 Op1,Op2 该条指令的功能如下:状态位 = Op1 EOR Op2的结果。 分枝类指令分枝类指令 v(1)B和BL B:分枝指令,其句法是: B条件码 destadd B指令是最简单的分枝指令。ARM9微处理器一旦遇到一个B指令, 将立即跳转到指令中给定的目的地址处,从那里继续执行。 BL:带链

8、接的分枝指令,其句法是: BL条件码 destadd BL指令是一个需要返回的分枝指令。该分枝指令在分枝之前,R14 寄存器(即LR寄存器)中会装载上R15寄存器(即PC寄存器)的内 容。若要从分枝处返回发生转移的地方,可以通过重新把R14寄存器 的内容装载到R15 寄存器中来实现,ARM微处理器返回到这个分枝 指令之后的第一条指令处继续执行。 软件中断指令软件中断指令 vSWI:软件中断指令,SWI是Software Interrupt的缩写。其句法是: SWI条件码 destcoad v上述句法中destcoad是一个24位的编号,即软 件中断号。SWI指令会引起SWI异常,使得微 处理器

9、的工作模式变换为管理模式,CPSR将被 保存到管理模式的SPSR中,指令执行流水被阻 塞,并转移到SWI异常向量处。该指令不影响条 件码标志。 vSWI指令主要是为操作系统提供的。 汇编器伪指令汇编器伪指令 v伪指令不是目标系统能够执行的指令,而是汇编 器采用的,用来指示如何进行汇编的符号,这种 符号在汇编时,汇编器会把它汇编成一条或几条 正真的汇编指令。 v几种主要的伪指令: v(1)ADR 将程序相对偏移或寄存器相对偏移地址加载到寄存器中 v(2)ADRL 该伪指令是加载长地址,功能类似如ADR伪指令 v(3)LDR 该伪指令作用是把一个32位常量或常量表达式加载到寄 存器中。 3.3 3

10、.3 汇编程序设计汇编程序设计 v嵌入式系统发展到今天,程序的运行效率及存储 容量已不是嵌入式系统设计时所需考虑的主要问 题。若只是关心嵌入式系统所具有的应用功能, 那么,在设计中,采用高级编程语言(例如C语 言等)编写程序更合适,它隐藏了微处理器执行 指令的许多细节,设计时相对方便。 v但是,如果嵌入式系统设计者希望对嵌入式系统 有更深层次的了解,希望能完成系统启动程序的 编写、操作系统移植等任务,那么,掌握汇编语 言程序设计是非常必要的。 汇编编程规则 v利用ARM9汇编指令进行程序设计时,程序中的 每一语句行的格式为: 标号 指令 “或” 指示符 “或” 伪指令 ;注解。 v指示符是汇编

11、器定义的,也是用来指示汇编器如 何进行汇编的符号,这些符号仅指示汇编器如何 进行汇编和连接,不会被汇编成一条正真的汇编 指令。 v几个主要指示符: (1)AREA 指示汇编器汇编一段新的代码段或数据段的指示符; (2)ENTRY 指示汇编器把其后的首条指令作为程序入口的指示符, 一个源文件中只能有一个ENTRY指示符; (3)END 表示源程序结束的指示符; (4)IMPORT 告诉汇编器某个变量名或标号在当前程序段中未曾定义 的指示符,这个变量名或标号由连接器进行定位; (5)EXPORT 指示由连接器在目标和库文件中使用的符号的指示符; (6)CODE32 指示汇编器将随后的指令作为32位

12、ARM指令进行汇编 的指示符; (7)CODE16 指示汇编器将随后的指令作为16位Thumb指令进行汇 编的指示符; (8)GET 指示包含一个文件的指示符,汇编器在GET处汇编包含的 文件; (9)DATA 指示一个标号是代码段中数据区域的标号,该符号后是通 常是伪指令DCB或DCD。 汇编指令的特点 vARM9的汇编指令相对于其他微处理器的汇编指 令来说,具有许多特点: v(1)指令的条件执行:32位ARM指令集中的所 有指令都是条件执行的指令。需要条件执行的指 令只需要使用条件后缀,就可以实现条件执行。 例1: CMP R0,R1 ;比较R0和R1的值,结果用于更新标志 ADDEQS

13、R0,R1,R2 ;如标志Z =1,则加法指令执行,并更新标志 v(2)多种形式的传送类指令 v(3)多寄存器加载/存储指令 v(4)映射存储的指示符:ARM汇编器可以使用 MAP和“#”指示符,来描述一个结构体,指示符 MAP和“#”主要用于完成结构体的定义,并不一 定具体确定其内存空间地址。 v指示符MAP说明结构体的基地址,指示符“#”定 义数据项的标号并说明所需空间。 例如: MAP 0x00001000 element1 # 4 ;element1占用4字节 element2 # 4 ;element2占用4字节 element3 # 8 ;element3占用8字节 element

14、4 # 8 ;element4占用8字节 element5 # 256 ;element5占用256字节 v(5)程序中的宏定义:在汇编程序设计时,宏 定义的使用是为了提高程序的可读性、以及可维 护性。ARM汇编器提供的宏类似于标准C语言中 的#define,其功能是在程序源代码中进行字符 替代。 vARM汇编器把指示符MACRO作为宏定义的开始 ,指示符MEND作为宏定义的结束,并且可以带 有参数。例如: MACRO $ aa example $ bb,$cc,$dd $ aa CMP $ cc,#0 B$ dd $ bb MEND 汇编程序实例汇编程序实例-系统引导程序系统引导程序 v系统

15、引导程序( Bootloader)是目标系 统硬件上电或复位后执行 的第一段程序代码,它通 常被安排在系统复位异常 向量地址处。 v系统引导程序是依赖于具 体硬件环境的,除了依赖 于微处理器的体系结构外 ,还依赖于具体的板级硬 件配置。 v通常系统引导程序需完成以下功能: v 设置异常向量表(即在异常向量地址处设置相关分枝指令 ) v 关看门狗定时器,关中断。 v 有时需要设置系统微处理器的速度和时钟频率。 v 设置好堆栈指针。系统堆栈初始化取决于用户使用哪些异 常,以及系统需要处理哪些错误类型。一般情况下,管理 模式堆栈必须设置;若使用了IRQ中断,则IRQ中断堆 栈必须设置。 v 如果系统应用程序是运行在用户模式下,可在系统引导程 序中将微处理器的工作模式改为用户模式并初始化用户模 式下的堆栈指针。 v 若系统使用了DRAM或其他外设,需要设置相关寄存器 ,以确定其刷新频率、总线宽度等信息。 v 初始化所需的存储器空间。 v 跳转到C程序的入口点。 v一个启动引导程序示例(文件名: Startup.s ) v ;下面指令包含2440addr.s文件,该文件中定义了S3C2440内部寄 存器地址对应的变量,如WTCON、

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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

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