arm汇编伪指令与伪操作培训课件.ppt

上传人:F****n 文档编号:97057531 上传时间:2019-09-01 格式:PPT 页数:56 大小:307.50KB
返回 下载 相关 举报
arm汇编伪指令与伪操作培训课件.ppt_第1页
第1页 / 共56页
arm汇编伪指令与伪操作培训课件.ppt_第2页
第2页 / 共56页
arm汇编伪指令与伪操作培训课件.ppt_第3页
第3页 / 共56页
arm汇编伪指令与伪操作培训课件.ppt_第4页
第4页 / 共56页
arm汇编伪指令与伪操作培训课件.ppt_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《arm汇编伪指令与伪操作培训课件.ppt》由会员分享,可在线阅读,更多相关《arm汇编伪指令与伪操作培训课件.ppt(56页珍藏版)》请在金锄头文库上搜索。

1、第6章 ARM汇编伪指令与伪操作,2、伪操作:为完成汇编程序做各种准备工作,只在汇编过程中起作用,一旦汇编结束,它的作用也随之结束。,3、宏指令:是一段独立的程序代码,可插在源程序中。与子程序相似,但有本质不同。,1、伪指令:在汇编时将被合适的指令代替。,伪操作、宏指令一般与编译器有关,常用ARM编译开发环境有2种:GNU(基于Embest IDE环境)和ADS(ARM公司提供),目前常用的编译环境有2种: 1. ADS/SDT、RealView MDK等ARM公司推出的开发工具 2. GNU ARM开发工具,1. ADS/SDT、RealView MDK等ARM公司推出的开发工具 ADS由A

2、RM公司推出,使用了CodeWarrior公司的编译器。针对ARM资源配置为用户提供了在 CodeWarrior IDE 集成环境下配置各种ARM 开发工具的能力。 以ARM为目标平台的工程创建向导,可以使用户以此为基础,快速创建ARM和Thumb工程。,ARM 将Keil 公司收购之后,正式推出了针对ARM 微控制器的开发工具RealView Microcontroller Development Kit ( 简称Real View MDK 或者MDK) ,它将ARM 开发工具RealView Development Suite (简称RVDS) 的编译器RVCT 与Keil的工程管理、调试

3、仿真工具集成在一起,是一款非常强大的ARM 微控制器开发工具。,2. GNU ARM开发工具 GNU是“GNUs Not Unix”的递归缩写。在1983年9月27日由Richard Stallman公开发起GNU计划,它的目标是创建一套完全自由的操作系统。 GNU格式ARM汇编语言程序主要是面对在ARM平台上移植嵌入式Linux操作系统,GNU组织开发的基于ARM平台的编译工具有主要由GNU的汇编器as,交叉汇编器gcc和连接器ld组成。,61 汇编语言伪指令,伪指令是ARM处理器支持的汇编语言程序里的特殊助记符,它不在处理器运行期间由机器执行,只是在汇编时将被合适的机器指令代替成ARM或T

4、humb指令,从而实现真正的指令操作。 ARM伪指令有四条,分别为ADR伪指令、ADRL伪指令、LDR伪指令、NOP伪指令。,ARM伪指令大范围的地址读取,LDR伪指令用于加载32位的立即数或一个地址值到指定寄存器。在汇编编译源程序时,LDR伪指令被编译器替换成一条合适的指令。若加载的常数未超出MOV或MVN的范围,则使用MOV或MVN指令代替该LDR伪指令,否则汇编器将常量放入文字池,并使用一条程序相对偏移的LDR指令从文字池读出常量。,LDRcond register,= expr | label_expr,LDR伪指令格式,指令执行的条件码,加载的目标寄存器,基于PC的地址表达式或外部表

5、达式,注意: 1.从指令位置到文字池的偏移量必须小于4KB; 2.与ARM指令的LDR相比,伪指令的LDR的参数有“=”号。,ARM伪指令大范围的地址读取,LDR伪指令用于加载32位的立即数或一个地址值到指定寄存器。在汇编编译源程序时,LDR伪指令被编译器替换成一条合适的指令。若加载的常数未超出MOV或MVN的范围,则使用MOV或MVN指令代替该LDR伪指令,否则汇编器将常量放入文字池,并使用一条程序相对偏移的LDR指令从文字池读出常量。,应用示例(加载常量):,LDR R2, =0xFF0 ;MOV R2, #0xFF0 LDR R0, =0xFF000000 ;MOV R0, #0xFF0

6、00000 LDR R1, =0xFFFFFFFE ;MVN R1, #0x1,ARM伪指令大范围的地址读取,LDR伪指令用于加载32位的立即数或一个地址值到指定寄存器。在汇编编译源程序时,LDR伪指令被编译器替换成一条合适的指令。若加载的常数未超出MOV或MVN的范围,则使用MOV或MVN指令代替该LDR伪指令,否则汇编器将常量放入文字池,并使用一条程序相对偏移的LDR指令从文字池读出常量。,应用示例(加载地址):,. LDR R1,=InitStack . InitStack MOV R0, LR .,使用伪指令将程序标号InitStack的地址存入R1,ARM伪指令大范围的地址读取,LD

7、R伪指令用于加载32位的立即数或一个地址值到指定寄存器。在汇编编译源程序时,LDR伪指令被编译器替换成一条合适的指令。若加载的常数未超出MOV或MVN的范围,则使用MOV或MVN指令代替该LDR伪指令,否则汇编器将常量放入文字池,并使用一条程序相对偏移的LDR指令从文字池读出常量。,应用示例(加载地址):,编译后的反汇编代码:,. LDR R1,=InitStack . InitStack MOV R0, LR .,. 0x60 LDR R1,0xb4 . 0x64 MOV R0, LR . 0xb4 DCD 0x64,使用伪指令将程序标号InitStack的地址存入R1,地址,程序代码,AR

8、M伪指令大范围的地址读取,LDR伪指令用于加载32位的立即数或一个地址值到指定寄存器。在汇编编译源程序时,LDR伪指令被编译器替换成一条合适的指令。若加载的常数未超出MOV或MVN的范围,则使用MOV或MVN指令代替该LDR伪指令,否则汇编器将常量放入文字池,并使用一条程序相对偏移的LDR指令从文字池读出常量。,应用示例(加载地址):,编译后的反汇编代码:,. LDR R1,=InitStack . InitStack MOV R0, LR .,. 0x60 LDR R1,0xb4 . 0x64 MOV R0, LR . 0xb4 DCD 0x64,使用伪指令将程序标号InitStack的地址

9、存入R1,LDR伪指令被汇编成一条LDR指令,并在文字池中定义了一个常量,该常量为InitStack标号的地址,ARM伪指令中等范围的地址读取,ADRL伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中,比ADR伪指令可以读取更大范围的地址 。在汇编编译器编译源程序时,ADRL伪指令被编译器替换成两条合适的指令。若不能用两条指令实现,则产生错误,编译失败。,ADRLcond register,expr,ADRL伪指令格式,指令执行的条件码,加载的目标寄存器,地址表达式,地址表达式expr的取指范围: 当地址值是字节对齐时,其取指范围为-64K64K; 当地址值是字对齐时

10、,其取指范围为-256K256K;,ARM伪指令中等范围的地址读取,ADRL伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中,比ADR伪指令可以读取更大范围的地址 。在汇编编译器编译源程序时,ADRL伪指令被编译器替换成两条合适的指令。若不能用两条指令实现,则产生错误,编译失败。,. ADRL R0,Delay . Delay MOV R0,r14 .,应用示例(源程序):,使用伪指令将程序标号Delay的地址存入R0,ARM伪指令中等范围的地址读取,ADRL伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中,比ADR伪指令可以读取更大范围的地

11、址 。在汇编编译器编译源程序时,ADRL伪指令被编译器替换成两条合适的指令。若不能用两条指令实现,则产生错误,编译失败。,. ADRL R0,Delay . Delay MOV R0,r14 .,应用示例(源程序):,. 0x20 ADD r1,pc,#40 0x24 ADD r1,r1,#FF00 . 0xFF68 MOV r0,r14 .,编译后的反汇编代码:,使用伪指令将程序标号Delay的地址存入R0,地址,程序代码,ARM伪指令中等范围的地址读取,ADRL伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中,比ADR伪指令可以读取更大范围的地址 。在汇编编译器编

12、译源程序时,ADRL伪指令被编译器替换成两条合适的指令。若不能用两条指令实现,则产生错误,编译失败。,. ADRL R0,Delay . Delay MOV R0,r14 .,应用示例(源程序):,. 0x20 ADD r1,pc,#40 0x24 ADD r1,r1,#FF00 . 0xFF68 MOV r0,r14 .,编译后的反汇编代码:,使用伪指令将程序标号Delay的地址存入R0,ADRL伪指令被汇编成两条指令,ARM伪指令小范围的地址读取,ADR伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。在汇编编译器编译源程序时,ADR伪指令被编译器替换成一条合适的

13、指令。通常,编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能,若不能用一条指令实现,则产生错误,编译失败。,ADRcond register,expr,ADR伪指令格式,指令执行的条件码,加载的目标寄存器,地址表达式,地址表达式expr的取指范围: 当地址值是字节对齐时,其取指范围为-255255; 当地址值是字对齐时,其取指范围为-10201020;,ARM伪指令小范围的地址读取,ADR伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。在汇编编译器编译源程序时,ADR伪指令被编译器替换成一条合适的指令。通常,编译器用一条ADD指令或SUB指令来实现该AD

14、R伪指令的功能,若不能用一条指令实现,则产生错误,编译失败。,. ADR R0,Delay . Delay MOV R0,r14 .,应用示例(源程序):,使用伪指令将程序标号Delay的地址存入R0,. 0x20 ADD r1,pc,#0x3c . . 0x64 MOV r0,r14 .,ARM伪指令小范围的地址读取,ADR伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。在汇编编译器编译源程序时,ADR伪指令被编译器替换成一条合适的指令。通常,编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能,若不能用一条指令实现,则产生错误,编译失败。,. ADR R

15、1,Delay . Delay MOV R0,r14 .,应用示例(源程序):,编译后的反汇编代码:,使用伪指令将程序标号Delay的地址存入R0,地址,程序代码,ARM伪指令小范围的地址读取,ADR伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。在汇编编译器编译源程序时,ADR伪指令被编译器替换成一条合适的指令。通常,编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能,若不能用一条指令实现,则产生错误,编译失败。,. ADR R0,Delay . Delay MOV R0,r14 .,应用示例(源程序):,. 0x20 ADD r1,pc,#0x3c .

16、 . 0x64 MOV r0,r14 .,编译后的反汇编代码:,使用伪指令将程序标号Delay的地址存入R0,ADR伪指令被汇编成一条指令,ARM伪指令小范围的地址读取,ADR伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。在汇编编译器编译源程序时,ADR伪指令被编译器替换成一条合适的指令。通常,编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能,若不能用一条指令实现,则产生错误,编译失败。,应用示例2(查表): ADR R0,DISP_TAB ; 加载转换表地址 LDRB R1,R0,R2 ; 使用R2作为参数,进行查表 DISP_TAB DCB 0xC0,0xF9,0xA4,0xB0

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

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

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