《ARM体系结构编程》PPT课件.ppt_第1页
《ARM体系结构编程》PPT课件.ppt_第2页
《ARM体系结构编程》PPT课件.ppt_第3页
《ARM体系结构编程》PPT课件.ppt_第4页
《ARM体系结构编程》PPT课件.ppt_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ARM汇编编程 教学目的 掌握汇编语言程序的基本结构掌握ARM汇编器的伪操作掌握汇编语言程序的上机过程 教学内容 3 1汇编语言程序格式3 2ARM汇编器的伪操作3 3汇编语言程序设计3 5汇编语言和C语言交互编程 3 1汇编语言程序格式 3 1 1汇编语言的基本概念3 1 2汇编语言源程序的组成3 1 3汇编语言程序中常用的符号3 1 4汇编语言程序中的表达式和运算符 3 1 1汇编语言的基本概念 表3 1汇编后的机器代码 3 1 2汇编语言源程序的组成 1 汇编语言源程序的结构AREAInit CODE READONLYENTRYLDRR0 0 x3FF5000LDRR1 0 xFFSTRR1 R0 LDRR0 0 x3FF5008LDRR1 0 x01STRR1 R0 END 程序段 段是相对独立的指令或数据序列 具有特定的名称 代码段数据段通用段段具有一定的属性 READONLYREADWRITE 2 汇编语言的语句格式 LABEL OPERATION OPERAND COMMENT 标号域操作助记符域操作数域注释域StartMOVR0 0 x3F 1 标号域 标号域用来表示指令的地址 变量 过程名 数据的地址和常量标号是一个自行设计的标识符或名称 语句标号可以是大小写符号混合 通常以字母开头 由字母 数字 下划线等组成 语句标号不能与寄存器名 指令助记符 伪指令 操作 助记符 变量名同名 语句标号必须在一行的开头书写 不能留空格 2 操作助记符域 操作助记符域可以为指令 伪操作 宏指令或伪指令的助记符 ARM汇编器对大小写敏感 在汇编语言程序设计中 每一条指令的助记符可以全部用大写 或全部用小写 但不允许在一条指令中大 小写混用 所有的指令都不能在行的开头书写 必须在指令的前面有空格 然后在书写指令 指令助记符和后面的操作数或操作寄存器之间必须有空格 不可以在这之间使用逗号 3 操作数域 操作数域表示操作的对象 操作数可以是常量 变量 标号 寄存器名或表达式 不同对象之间必须用逗号分开 课堂练习判断指令格式正误 AREAEX3 CODE READONLYGBLADATADATASETA0 x20ADDR0 R1 R2ADDR0 R1 r2addR0 R1 r2AddR0 R1 r2 3 1 3汇编语言程序中常用的符号 在汇编语言程序设计中 经常使用各种符号表示变量 常量和地址符号由大小写字母 数字以及下划线组成 符号区分大小写 同名的大 小写符号会被编译器认为是两个不同的符号 符号在其作用范围内必须唯一 即在其作用范围内不可有同名的符号 自定义的符号名不能与系统的保留字相同 符号名不应与指令或伪指令同名 1 程序中的变量 变量的类型 数值变量逻辑变量字符串变量作用范围 全局变量局部变量 2 程序中的常量 ARM THUMB 汇编程序所支持的常量有数值常量 逻辑常量和字符串常量 在ARM汇编语言中 使用EQU来定义数值常量 数值常量有下列表示方式 十进制数十六进制数N进制数 形如n XXX 其中n的范围是2到9 XXX是具体数值 ASCII的表示 例如 A 表达A的ASCII码 指令 MOVR1 B 等同于MOVR1 0 x42 3 2ARM汇编器的伪操作 区别 指令伪指令 ADRADRLLDR伪操作 3 2ARM汇编器的伪操作 3 2 1符号定义伪操作3 2 2数据定义伪操作3 2 3汇编控制伪操作3 2 4其它常用的伪操作 3 2 1符号定义伪操作 常见的符号定义伪操作有如下几种 GBLA GBLL GBLSLCLA LCLL LCLSSETA SETL SETS 例 使用示例 GBLAA1A1SETA0 x0FGBLLA2A2SETL TRUE GBLSA3A3SETS TESTING 3 2 2数据定义伪操作 DCB分配一片连续的字节存储单元并初始化 表达式可以使0 255的数值或字符串 可用 代替 DCW DCWU 分配一片连续的半字存储单元并初始化 表达式可以为程序标号或数值表达式 DCD DCDU 分配一片连续的字存储单元并初始化 表达式可以为程序标号或数值表达式DCDODCISPACEFIELDMAP等 3 2 3汇编控制伪操作 IF ELSE ENDIFWHILE WENDMACRO MEND MEXIT 3 2 4其它常用的伪操作 AREAALIGNCODE16 CODE32ENTRYEQUEXPORT 或GLOBAL IMPORTEXTERNGET 或INLXUDE 常用的伪操作 AREA伪操作用于定义一个代码段或数据段AREA段名 属性1 属性2 一个大的程序可以包括多个代码段和数据段 一个汇编程序至少包含一个段AREAExample1 CODE READONLYAREAExample2 DATA READWRITE 常用的伪操作 EQU伪操作用于为程序中的常量 标号等定义一个等效的字符名称名称EQU表达式 类型 abcdEQU50 定义标号abcd的值为50名称为EQU伪操作定义的字符名称 当表达式为32位的常量时 可以指定表达式的数据类型 可以有以下三种类型 CODE16CODE32DATAAddrEQU0 x54 CODE32 定义Addr的值为0 x54 且该处为32位的ARM指令 常用的伪操作 ENTRY和ENDENTRY用于指定汇编程序的入口每一个汇编源程序都包含END伪操作 以告诉本源程序的结束AREAExample1 CODE READONLYENTRYEND 常用的伪操作 EXPORT或GLOBALEXPORT用于在程序中声明一个全局的标号 该标号可在其他的文件中引用 可用GLOBAL代替 AREAExample CODE READONLYEXPORTDoAdd 下面的函数名称DoAdd可以被其他源文件引用DoAddADDr0 r0 r1 常用的伪操作 CODE16及CODE32因此 在使用ARM指令和Thumb指令混合编程的代码里 可用这两条伪指令进行切换 但注意他们只通知编译器其后指令的类型 并不能对处理器进行状态的切换 AREAExample CODE READONLYCODE32 通知编译器后面的指令为32位的ARM指令LDRR0 start 1BXR0CODE16StartMOVR1 10 常用的伪操作 IMPORT伪操作告诉编译器当前的符号不是在本源文件中定义的 而是在其他源文件中定义的 在本源文件中可能引用该符号IMPORTMain 通知编译器当前文件要引用标号Main 但Main在其他文件中定义 常用的伪操作 GET 或INCLUDE 将一个源文件包含到当前的源文件中 并将被包含的源文件在当前位置进行汇编处理 例 AREAInit CODE READONLYGETa1 s END 3 3ARM汇编编程 AREAAdd CODE READONLY 程序起始定义ENTRY 第一条指令的标示符 只能有一个 下面是程序主体StartMOVr0 1MOVr1 2BLdoadd 调用子程序doaddADDr0 r0 r1 r0 r0 r1MOVpc lrEND END伪指令必须和ENTRY配对使用 3 3ARM汇编例子 例 已知32位变量X Y存放在存储器的地址0 x90010 0 x90014中 要求实现Z X Y 其中Z的值存放在0 x90018中 3 3ARM汇编例子 代码编写 AREAEX CODE READONLYENTRYCODE32STARTLDRR0 0 x90010 LDRR1 R0 4LDRR2 R0 4ADDR1 R1 R2STRR1 R0 BSTARTEND 3 3ARM汇编例子 例 已知32位有符号数X存放在存储器的地址0 x90010中 要求实现 Y X X 0 X X 0 其中Y值放在0 x90010中 3 3ARM汇编例子 STARTLDRR1 0 x90010MOVR0 0LDRR2 R1 CMPR2 0SUBLTR2 R0 R2STRR2 R1 3 4C语言与汇编语言 在应用系统的程序设计中 若所有的编程任务均用汇编语言来完成 其工作量是可想而知的 同时不利于系统升级或应用软件移植ARM体系结构支持C C 以及与汇编语言的混合编程 在一个完整的程序设计中 除了初始部分用汇编语言完成以外 其主要的编程任务一般都用C C 完成 3 4汇编语言与C语言的混合编程 下面通过几个例子进一步了解内联汇编的语法 1 字符串的复制下面的例子使用一个循环完成了字符串的复制工作 3 4汇编语言与C语言的混合编程 includevoidmy strcpy constchar src char dst intch asm loop LDRBch src 1STRBch dst 1CMPch 0BNEloop 3 4汇编语言与C语言的混合编程 intmain void constchar a helloworld charb 20 my strcpy a b printf originalstring s n a printf copiedstring s n b return0 3 4汇编语言与C语言的混合编程 2 中断使能下面的例子通过读取程序状态寄存器 CPSR 并设置它的中断使能位bit 7 来禁止 打开中断 需要注意的是 该例只能运行在系统模式下 因为用户模式是无权修改程序状态寄存器的 3 4汇编语言与C语言的混合编程 inlinevoidenable IRQ void inttmp asm MRStmp CPSRBICtmp tmp 0 x80MSRCPSR c tmp 3 4汇编语言与C语言的混合编程 inlinevoiddisable IRQ void inttmp asm MRStmp CPSRORRtmp tmp 0 x80MSRCPSR c tmp intmain void

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论