安徽理工大学计算机汇编教程-ARMThumb汇编语言.ppt_第1页
安徽理工大学计算机汇编教程-ARMThumb汇编语言.ppt_第2页
安徽理工大学计算机汇编教程-ARMThumb汇编语言.ppt_第3页
安徽理工大学计算机汇编教程-ARMThumb汇编语言.ppt_第4页
安徽理工大学计算机汇编教程-ARMThumb汇编语言.ppt_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

2019/7/16,第17章 ARM /Thumb汇编语言,1,8086/8088和ARM核汇编语言程序设计,第17章 ARM/Thumb汇编语言,2019/7/16,第17章 ARM /Thumb汇编语言,2,17.2 ARM指令的寻址方式,17.3 ARM汇编语言的语句格式,第17章 ARM/Thumb汇编语言,17.1 ARM指令的分类及格式,2019/7/16,第17章 ARM /Thumb汇编语言,3,17.1.1 ARM指令的分类,ARM处理器是基于精简指令集计算机(RISC)原理设计的,指令集和相关译码机制较为简单。ARM 指令归纳起来可分为以下6类: 跳转指令 数据处理指令 程序状态寄存器(PSR)传输指令 内存取数/存数操作指令 协处理器指令 异常中断产生指令,2019/7/16,第17章 ARM /Thumb汇编语言,4,17.1.2 ARM指令一般编码格式,其中各位的含义如下: (1) cond (bit31 bit28)指令执行的操作码 (2) opcode (bit24 bit21) 指令操作符编码 (3) S (bit20)决定指令操作是否影响CPSR (4) Rn (bit19 bit16)包含第一个操作数的寄存器编码 (5) Rd (bit15 bit12)目标寄存器编码 (6) shifter_operand(bit11 bit0)表示第二个操作数 (7) bit27bit25 为固定值001,2019/7/16,第17章 ARM /Thumb汇编语言,5,17.1.3 ARM指令基本语法格式,一条典型的ARM指令语法格式如下所示: S , 其中: opcode 指令助记符,如ADD,SUB等。 cond 指令执行条件,如EQ,NE等。 S 决定指令的操作是否影响CPSR寄存器的值,书写时影响CPSR。 Rd 目标寄存器。 Rn 包含第一个操作数的寄存器。 operand2 第二个操作数。,2019/7/16,第17章 ARM /Thumb汇编语言,6,17.1.3 ARM指令基本语法格式,1. 第二个操作数operand2 在ARM指令中灵活使用第二个操作数能够提高代码的效率。第二个操作数operand2通常有下面三种格式: 立即数方式 寄存器方式 寄存器移位方式,2019/7/16,第17章 ARM /Thumb汇编语言,7,17.1.3 ARM指令基本语法格式,(1) 立即数方式 每个立即数由一个8位的常数循环右移偶数位得到。其中循环右移的位数由一个4位二进制的两倍表示。即立即数=8位常数imm8循环右移 2*循环移位次数。 立即数方式应用举例: MOV R0,#1 ;R0=1 AND R1,R2,#0xf ;R2与0x0f,结果保存在R1 LDR R0,R1,# -4 ;读取R1地址上的存储单元内容,且R1=R1-4,2019/7/16,第17章 ARM /Thumb汇编语言,8,17.1.3 ARM指令基本语法格式,(2) 寄存器方式 在寄布器寻址方式下,操作数即为寄存器的数值。 寄存器方式应用举例: MOV R3,R2 ;将R2的数值放到R3中 ADD R0,Rl,R2 ;R0数值等于R1的数值加上R2的数值,2019/7/16,第17章 ARM /Thumb汇编语言,9,17.1.3 ARM指令基本语法格式,(3) 寄存器移位方式 将寄存器的移位结果作为操作数,但寄存器的内容保持不变,移位方法如下: ASR #n/Rs 算术右移n位(1n32)或寄存器Rs指定 LSL #n/Rs 逻辑左移n位(1n32)或寄存器Rs指定 LSR #n/Rs 逻辑右移n位(1n32)或寄存器Rs指定 ROR #n/Rs 循环右移n位(1n32)或寄存器Rs指定 RRX 扩展的循环右移 移位的位数可以用立即数方式或者寄存器方式表示。,2019/7/16,第17章 ARM /Thumb汇编语言,10,17.1.3 ARM指令基本语法格式,2. 条件码cond,2019/7/16,第17章 ARM /Thumb汇编语言,11,17.2 ARM指令的寻址方式,17.3 ARM汇编语言的语句格式,第17章 ARM/Thumb汇编语言,17.1 ARM指令的分类及格式,2019/7/16,第17章 ARM /Thumb汇编语言,12,操作数的值在寄存器中,指令中的地址码字段指出的是寄存器编号,指令执行时直接取出寄存器值来操作。寄存器寻址指令举例如下: MOV R1,R2 ;将R2的值存入R1 SUB R0,R1,R2 ;将R1的值减去R2的值,结果保存到R0,寻址方式分类寄存器寻址,MOV R1,R2,0xAA,17.2 ARM指令的寻址方式,2019/7/16,第17章 ARM /Thumb汇编语言,13,立即寻址指令中的操作码字段后面的地址码部分即是操作数本身,也就是说,数据就包含在指令当中,取出指令也就取出了可以立即使用的操作数(这样的数称为立即数)。立即寻址指令举例如下: SUBS R0,R0,#1 ;R0减1,结果放入R0,并且影响标志位 MOV R0,#0xFF000 ;将立即数0xFF000装入R0寄存器,寻址方式分类立即寻址,MOV R0,#0xFF00,0xFF00,从代码中获得数据,17.2 ARM指令的寻址方式,2019/7/16,第17章 ARM /Thumb汇编语言,14,寄存器移位寻址是ARM指令集特有的寻址方式。当第2个操作数是寄存器移位方式时,第2个寄存器操作数在与第1个操作数结合之前,选择进行移位操作。寄存器移位寻址指令举例如下: MOV R0,R2,LSL #3 ;R2的值左移3位,结果放入R0,即是R0=R28 ANDS R1,R1,R2,LSL R3 ;R2的值左移R3位,然后和R1相“与”操作,存入R1,寻址方式分类寄存器移位寻址,MOV R0,R2,LSL #3,0x08,0x08,逻辑左移3位,17.2 ARM指令的寻址方式,2019/7/16,第17章 ARM /Thumb汇编语言,15,寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号,所需的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针。寄存器间接寻址指令举例如下: LDR R1,R2 ;将R2指向的存储单元的数据读出保存在R1中 SWP R1,R1,R2 ;将寄存器R1的值和R2指定的存储单元的内容交换,寻址方式分类寄存器间接寻址,LDR R1,R2,0xAA,17.2 ARM指令的寻址方式,2019/7/16,第17章 ARM /Thumb汇编语言,16,基址寻址就是将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址。基址寻址用于访问基址附近的存储单元,常用于查表、数组操作、功能部件寄存器访问等。基址寻址指令举例如下: LDR R2,R3,#0x0C ;读取R3+0x0C地址上的存储单元的内容,放入R2 STR R1,R0,#-4! ;先R0=R0-4,然后把R1的值寄存到保存到R0指定的存储单元,寻址方式分类基址寻址,LDR R2,R3,#0x0C,0xAA,将R3+0x0C作为地址装载数据,17.2 ARM指令的寻址方式,2019/7/16,第17章 ARM /Thumb汇编语言,17,多寄存器寻址一次可传送几个寄存器值,允许一条指令传送16个寄存器的任何子集或所有寄存器。多寄存器寻址指令举例如下: LDMIA R1!,R2-R7,R12 ;将R1指向的单元中的数据读出到 ;R2R7、R12中(R1自动加1) STMIA R0!,R2-R7,R12 ;将寄存器R2R7、R12的值保存到R0指向的存储单元中 ;(R0自动加1),寻址方式分类多寄存器寻址,LDR R1!,R2-R4,R6,0x40000010,17.2 ARM指令的寻址方式,2019/7/16,第17章 ARM /Thumb汇编语言,18,堆栈是一个按特定顺序进行存取的存储区,操作顺序为“后进先出” 。堆栈寻址是隐含的,它使用一个专门的寄存器(堆栈指针)指向一块存储区域(堆栈),指针所指向的存储单元即是堆栈的栈顶。存储器堆栈可分为两种: 向上生长:向高地址方向生长,称为递增堆栈 向下生长:向低地址方向生长,称为递减堆栈,寻址方式分类堆栈寻址,17.2 ARM指令的寻址方式,2019/7/16,第17章 ARM /Thumb汇编语言,19,寻址方式分类堆栈寻址,0x12345678,0x12345678,17.2 ARM指令的寻址方式,2019/7/16,第17章 ARM /Thumb汇编语言,20,堆栈指针指向最后压入的堆栈的有效数据项,称为满堆栈;堆栈指针指向下一个待压入数据的空位置,称为空堆栈。,寻址方式分类堆栈寻址,0x12345678,17.2 ARM指令的寻址方式,2019/7/16,第17章 ARM /Thumb汇编语言,21,所以可以组合出四种类型的堆栈方式: 满递增:堆栈向上增长,堆栈指针指向内含有效数据项的最高地址。指令如LDMFA、STMFA等; 空递增:堆栈向上增长,堆栈指针指向堆栈上的第一个空位置。指令如LDMEA、STMEA等; 满递减:堆栈向下增长,堆栈指针指向内含有效数据项的最低地址。指令如LDMFD、STMFD等; 空递减:堆栈向下增长,堆栈指针向堆栈下的第一个空位置。指令如LDMED、STMED等。,寻址方式分类堆栈寻址,17.2 ARM指令的寻址方式,2019/7/16,第17章 ARM /Thumb汇编语言,22,多寄存器传送指令用于将一块数据从存储器的某一位置拷贝到另一位置。 如: STMIA R0!,R1-R7 ;将R1R7的数据保存到存储器中。 ;存储指针在保存第一个值之后增加, ;增长方向为向上增长。 STMIB R0!,R1-R7 ;将R1R7的数据保存到存储器中。 ;存储指针在保存第一个值之前增加, ;增长方向为向上增长。,寻址方式分类块拷贝寻址,17.2 ARM指令的寻址方式,2019/7/16,第17章 ARM /Thumb汇编语言,23,相对寻址是基址寻址的一种变通。由程序计数器PC提供基准地址,指令中的地址码字段作为偏移量,两者相加后得到的地址即为操作数的有效地址。相对寻址指令举例如下: BL SUBR1 ;调用到SUBR1子程序 BEQ LOOP ;条件跳转到LOOP标号处 . LOOP MOV R6,#1 . SUBR1 .,寻址方式分类相对寻址,17.2 ARM指令的寻址方式,2019/7/16,第17章 ARM /Thumb汇编语言,24,17.2 ARM指令的寻址方式,17.3 ARM汇编语言的语句格式,第17章 ARM/Thumb汇编语言,17.1 ARM指令的分类及格式,2019/7/16,第17章 ARM /Thumb汇编语言,25,17.3 ARM汇编语言的语句格式,ARM(Thumb)汇编语言的语句格式为: 标号 指令或伪指令 ;注释,在汇编语言程序设计中,经常使用各种符号代替地址、变量和常量等,以增加程序的可读性。尽管符号的命名由编程者决定,但并不是任意的,必须遵循以下的约定: 符号区分大小写,同名的大、小写符号会被编译器认为是两个不同的符号。 符号在其作用范围内必须唯一。 自定义的符号名不能与系统的保留字相同。 符号名不应与指令或伪指令同名。,17.3.1 在汇编语言程序中常用的符号,2019/7/16,第17章 ARM /Thumb汇编语言,26,17.3.1 在汇编语言程序中常用的符号,1. 程序中的变量 程序中的变量是指其值在程序的运行过程中可以改变的量。ARM(Thumb)汇编程序所支持的变量有数字变量、逻辑变量和字符串变量。 数字变量用于在程序的运行中保存数字值,但注意数字值的大小不应超出数字变量所能表示的范围。 逻辑变量用于在程序的运行中保存逻辑值,逻辑值只有两种取值情况:真或假。 字符串变量用于在程序的运行中保存一个字符串,但注意字符串的长度不应超出字符串变量所能表示的范围。,2019/7/16,第17章 ARM /Thumb汇编语言,27,17.3.1 在汇编语言程序中常用的符号,2. 程序中的常量 程序中的常量是指其值在程序的运行过程中不能被改变的量。ARM(Thumb)汇编程序所支持的常量有数字常量、逻辑常量和字符串常量。 数字常量一般为32位的整数,当作为无符号数时,其取值范围为0232-1,当作为有符号数时,其取值范围为-231231-1。 逻辑常量只有两种取值情况:真或假。 字符串常量为一个固定的字符串,一般用于程序运行时的信息提示。,2019/7/16,第17章 ARM /Thumb汇编语言,28,17.3.1 在汇编语言程序中常用的符号,3. 程序中的变量代换 程序中的变量可通过代换操作取得一个常量。代换操作符为“$”。 如果在数字变量前面有一个代换操作符“$”,编译器会将该数字变量的值转换为十六进制的字符串,并将该十六进制的字符串代换“$”后的数字变量。 如果在逻辑变量前面有一个代换操作符“$”,编译器会将该逻辑变量代换为它的取值(真或假)。 如果在字符串变量前面有一个代换操作符“$”,编译器会将该字符串变量的值代换“$”后的字符串变量。,2019/7/16,第17章 ARM /Thumb汇编语言,29,17.3.2 汇编语言程序中的表达式和运算符,表达式一般由变量、常量、运算符和括号构成。常用的表达式有数字表达式、逻辑表达式和字符串表达式,其运算次序遵循如下的优先级: 优先级相同的双目运算符的运算顺序为从左到右。 相邻的单目运算符的运算顺序为从右到左,且单目运算符的优先级高于其他运算符。 括号运算符的优先级最高。,2019/7/16,第17章 ARM /Thumb汇编语言,30,1. 数字表达式及运算符, “”、“”、“”、“/” 及“MOD”算术运算符 以上的算术运算符分别代表加、减、乘、除和取余数运算。例如,以X和Y表示两个数字表达式,则: XY 表示X与Y的和。 XY 表示X与Y的差。 XY 表示X与Y的乘积。 X/Y 表示X除以Y的商。 X:MOD:Y 表示X除以Y的余数。,2019/7/16,第17章 ARM /Thumb汇编语言,31,1. 数字表达式及运算符, “ROL”、“ROR”、“SHL”及“SHR”移位运算符 以X和Y表示两个数字表达式,以上的移位运算符代表的运算如下: X:ROL:Y 表示将X循环左移Y位。 X:ROR:Y 表示将X循环右移Y位。 X:SHL:Y 表示将X左移Y位。 X:SHR:Y 表示将X右移Y位。,2019/7/16,第17章 ARM /Thumb汇编语言,32,1. 数字表达式及运算符,“AND”、“OR”、“NOT”及“EOR”按位逻辑运算符 以X和Y表示两个数字表达式,以上的按位逻辑运算符代表的运算如下: X:AND:Y 表示将X和Y按位作逻辑与的操作。 X:OR:Y 表示将X和Y按位作逻辑或的操作。 :NOT:Y 表示将Y按位作逻辑非的操作。 X:EOR:Y 表示将X和Y按位作逻辑异或的操作。,2019/7/16,第17章 ARM /Thumb汇编语言,33,2. 逻辑表达式及运算符, “=”、“”、“=”、“” 运算符 以X和Y表示两个逻辑表达式,以上的运算符代表的运算如下: X = Y 表示X等于Y。 X Y 表示X大于Y。 X = Y 表示X大于等于Y。 X Y 表示X不等于Y。,2019/7/16,第17章 ARM /Thumb汇编语言,34,2. 逻辑表达式及运算符, “LAND”、“LOR”、“LNOT”及“LEOR”运算符 以X和Y表示两个逻辑表达式,以上的逻辑运算符代表的运算如下: X:LAND:Y 表示将X和Y 作逻辑与的操作。 X:LOR:Y 表示将X和Y作逻辑或的操作。 :LNOT:Y 表示将Y作逻辑非的操作。 X:LEOR:Y 表示将X和Y作逻辑异或的操作。,2019/7/16,第17章 ARM /Thumb汇编语言,35,3. 字符串表达式及运算符,LEN运算符 LEN运算符返回字符串的长度(字符数),以X表示字符串表达式,其语法格式如下: :LEN:X CHR运算符 CHR运算符将0255之间的整数转换为一个字符,以M表示某一个整数,其语法格式如下: :CHR:M,2019/7/16,第17章 ARM /Thumb汇编语言,36,3. 字符串表达式及运算符,STR运算符 STR运算符将将一个数字表达式或逻辑表达式转换为一个字符

温馨提示

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

评论

0/150

提交评论