安徽理工大学计算机汇编教程-ARMThumb汇编语言

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

计算机科学与技术系《汇编语言程序设计》2020/1/3第17章ARM/Thumb汇编语言18086/8088和ARM核汇编语言程序设计第17章ARM/Thumb汇编语言计算机科学与技术系《汇编语言程序设计》2020/1/3第17章ARM/Thumb汇编语言217.2ARM指令的寻址方式17.3ARM汇编语言的语句格式第17章ARM/Thumb汇编语言17.1ARM指令的分类及格式计算机科学与技术系《汇编语言程序设计》2020/1/3第17章ARM/Thumb汇编语言317.1.1ARM指令的分类ARM处理器是基于精简指令集计算机(RISC)原理设计的,指令集和相关译码机制较为简单。ARM指令归纳起来可分为以下6类:跳转指令数据处理指令程序状态寄存器(PSR)传输指令内存取数/存数操作指令协处理器指令异常中断产生指令计算机科学与技术系《汇编语言程序设计》2020/1/3第17章ARM/Thumb汇编语言417.1.2ARM指令一般编码格式3128272524212019161512110cond001opcodeSRnRdShifter_operand其中各位的含义如下:(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)bit27~bit25为固定值001计算机科学与技术系《汇编语言程序设计》2020/1/3第17章ARM/Thumb汇编语言517.1.3ARM指令基本语法格式一条典型的ARM指令语法格式如下所示:opcode{cond}{S}Rd,Rn{,operand2}其中:opcode指令助记符,如ADD,SUB等。cond指令执行条件,如EQ,NE等。S决定指令的操作是否影响CPSR寄存器的值,书写时影响CPSR。Rd目标寄存器。Rn包含第一个操作数的寄存器。operand2第二个操作数。计算机科学与技术系《汇编语言程序设计》2020/1/3第17章ARM/Thumb汇编语言617.1.3ARM指令基本语法格式1.第二个操作数operand2在ARM指令中灵活使用第二个操作数能够提高代码的效率。第二个操作数operand2通常有下面三种格式:立即数方式寄存器方式寄存器移位方式计算机科学与技术系《汇编语言程序设计》2020/1/3第17章ARM/Thumb汇编语言717.1.3ARM指令基本语法格式(1)立即数方式每个立即数由一个8位的常数循环右移偶数位得到。其中循环右移的位数由一个4位二进制的两倍表示。即立即数=8位常数imm8循环右移2*循环移位次数。立即数方式应用举例:MOVR0,#1;R0=1ANDR1,R2,#0xf;R2与0x0f,结果保存在R1LDRR0,[R1],#-4;读取R1地址上的存储单元内容,且R1=R1-4计算机科学与技术系《汇编语言程序设计》2020/1/3第17章ARM/Thumb汇编语言817.1.3ARM指令基本语法格式(2)寄存器方式在寄布器寻址方式下,操作数即为寄存器的数值。寄存器方式应用举例:MOVR3,R2;将R2的数值放到R3中ADDR0,Rl,R2;R0数值等于R1的数值加上R2的数值计算机科学与技术系《汇编语言程序设计》2020/1/3第17章ARM/Thumb汇编语言917.1.3ARM指令基本语法格式(3)寄存器移位方式将寄存器的移位结果作为操作数,但寄存器的内容保持不变,移位方法如下:ASR#n/Rs算术右移n位(1≤n≤32)或寄存器Rs指定LSL#n/Rs逻辑左移n位(1≤n≤32)或寄存器Rs指定LSR#n/Rs逻辑右移n位(1≤n≤32)或寄存器Rs指定ROR#n/Rs循环右移n位(1≤n≤32)或寄存器Rs指定RRX扩展的循环右移移位的位数可以用立即数方式或者寄存器方式表示。计算机科学与技术系《汇编语言程序设计》2020/1/3第17章ARM/Thumb汇编语言1017.1.3ARM指令基本语法格式2.条件码cond条件码助记符标志含义EQZ=1相等NEZ=0不相等CS/HSC=1无符号数大于或等于CC/LOC=0无符号数小于MIN=1负数PLN=0正数或零VSV=1溢出VCV=0没有溢出HIC=1,Z=0无符号数大于LSC=0,Z=1无符号数小于或等于GEN=V有符号数大于或等于LTN!=V有符号数小于GTZ=0,N=V有符号数大于LEZ=1,N!=V有符号数小于或等于AL任何无条件执行(指令默认条件)计算机科学与技术系《汇编语言程序设计》2020/1/3第17章ARM/Thumb汇编语言1117.2ARM指令的寻址方式17.3ARM汇编语言的语句格式第17章ARM/Thumb汇编语言17.1ARM指令的分类及格式计算机科学与技术系《汇编语言程序设计》2020/1/3第17章ARM/Thumb汇编语言12操作数的值在寄存器中,指令中的地址码字段指出的是寄存器编号,指令执行时直接取出寄存器值来操作。寄存器寻址指令举例如下:MOVR1,R2;将R2的值存入R1SUBR0,R1,R2;将R1的值减去R2的值,结果保存到R00xAA0x55R2R1•寻址方式分类——寄存器寻址MOVR1,R20xAA17.2ARM指令的寻址方式计算机科学与技术系《汇编语言程序设计》2020/1/3第17章ARM/Thumb汇编语言13立即寻址指令中的操作码字段后面的地址码部分即是操作数本身,也就是说,数据就包含在指令当中,取出指令也就取出了可以立即使用的操作数(这样的数称为立即数)。立即寻址指令举例如下:SUBSR0,R0,#1;R0减1,结果放入R0,并且影响标志位MOVR0,#0xFF000;将立即数0xFF000装入R0寄存器0x55R0MOVR0,#0xFF00程序存储•寻址方式分类——立即寻址MOVR0,#0xFF000xFF00从代码中获得数据17.2ARM指令的寻址方式计算机科学与技术系《汇编语言程序设计》2020/1/3第17章ARM/Thumb汇编语言14寄存器移位寻址是ARM指令集特有的寻址方式。当第2个操作数是寄存器移位方式时,第2个寄存器操作数在与第1个操作数结合之前,选择进行移位操作。寄存器移位寻址指令举例如下:MOVR0,R2,LSL#3;R2的值左移3位,结果放入R0,即是R0=R2×8ANDSR1,R1,R2,LSLR3;R2的值左移R3位,然后和R1相“与”操作,存入R10x55R0R20x01•寻址方式分类——寄存器移位寻址MOVR0,R2,LSL#30x080x08逻辑左移3位17.2ARM指令的寻址方式计算机科学与技术系《汇编语言程序设计》2020/1/3第17章ARM/Thumb汇编语言15寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号,所需的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针。寄存器间接寻址指令举例如下:LDRR1,[R2];将R2指向的存储单元的数据读出保存在R1中SWPR1,R1,[R2];将寄存器R1的值和R2指定的存储单元的内容交换0x55R0R20x400000000xAA0x40000000•寻址方式分类——寄存器间接寻址LDRR1,[R2]0xAA17.2ARM指令的寻址方式计算机科学与技术系《汇编语言程序设计》2020/1/3第17章ARM/Thumb汇编语言16基址寻址就是将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址。基址寻址用于访问基址附近的存储单元,常用于查表、数组操作、功能部件寄存器访问等。基址寻址指令举例如下:LDRR2,[R3,#0x0C];读取R3+0x0C地址上的存储单元的内容,放入R2STRR1,[R0,#-4]!;先R0=R0-4,然后把R1的值寄存到保存到R0指定的存储单元•寻址方式分类——基址寻址0x55R2R30x400000000xAA0x4000000CLDRR2,[R3,#0x0C]0xAA将R3+0x0C作为地址装载数据17.2ARM指令的寻址方式计算机科学与技术系《汇编语言程序设计》2020/1/3第17章ARM/Thumb汇编语言17多寄存器寻址一次可传送几个寄存器值,允许一条指令传送16个寄存器的任何子集或所有寄存器。多寄存器寻址指令举例如下:LDMIAR1!,{R2-R7,R12};将R1指向的单元中的数据读出到;R2~R7、R12中(R1自动加1)STMIAR0!,{R2-R7,R12};将寄存器R2~R7、R12的值保存到R0指向的存储单元中;(R0自动加1)0x40000000R1R20x??0x010x400000000x??R3R40x??R60x??0x020x030x040x400000040x400000080x4000000C存储器•寻址方式分类——多寄存器寻址LDRR1!,{R2-R4,R6}0x010x020x030x040x4000001017.2ARM指令的寻址方式计算机科学与技术系《汇编语言程序设计》2020/1/3第17章ARM/Thumb汇编语言18堆栈是一个按特定顺序进行存取的存储区,操作顺序为“后进先出”。堆栈寻址是隐含的,它使用一个专门的寄存器(堆栈指针)指向一块存储区域(堆栈),指针所指向的存储单元即是堆栈的栈顶。存储器堆栈可分为两种:向上生长:向高地址方向生长,称为递增堆栈向下生长:向低地址方向生长,称为递减堆栈•寻址方式分类——堆栈寻址17.2ARM指令的寻址方式计算机科学与技术系《汇编语言程序设计》2020/1/3第17章ARM/Thumb汇编语言19•寻址方式分类——堆栈寻址栈底栈顶栈区SP堆栈存储区栈顶栈底栈区SP向下增长向上增长0x123456780x12345678堆栈压栈堆栈压栈17.2ARM指令的寻址方式计算机科学与技术系《汇编语言程序设计》2020/1/3第17章ARM/Thumb汇编语言20栈顶SP栈顶SP栈底空堆栈栈底满堆栈堆栈指针指向最后压入的堆栈的有效数据项,称为满堆栈;堆栈指针指向下一个待压入数据的空位置,称为空堆栈。•寻址方式分类——堆栈寻址0x123456780x12345678栈顶SP0x12345678栈顶SP压栈压栈17.2ARM指令的寻址方式计算机科学与技术系《汇编语言程序设计》2020/1/3第17章ARM/Thumb汇编语言21所以可以组合出四种类型的堆栈方式:满递增:堆栈向上增长,堆栈指针指向内含有效数据项的最高地址。指令如LDMFA、STMFA等;空递增:堆栈向上增长,堆栈指针指向堆栈上的第一个空位置。指令如LDMEA、STMEA等;满递减:堆栈向下增长,堆栈指针指向内含有效数据项的最低地址。指令如LDMFD、STMFD等;空递减:堆栈向下增长,堆栈指针向堆栈下的第一个空位置。指令如LDMED、STMED等。•寻址方式分类——堆栈寻址17.2ARM指令的寻址方式计算机科学与技术系《汇编语言程序设计》2020/1/3第17章ARM/Thumb汇编语言22多寄存器传送指令用于将一块数据从存储器的某一位置拷贝到另一位置。如:STMIAR0!,{R1-R7};将R1~R7的数据保存到存储器中。;存储指针在保存第一个值之后增加,;增长方向为向上增长。STMIBR0!,{R1-R7};将R1~R7的数据保存到存储器中。;存储指针在保存第一个值之前增加,;增长方向为向上增长。•寻址方式分类——块拷贝寻址17.2ARM指令的寻址方式计算机科学与技术系《汇编语言程序设计》2020/1/3第17章ARM/Thumb汇编语言23相对寻址是基址寻址的一种变通。由程序计数器PC提供基准地址,指令中的地址码字段作为偏移量,两者相加后得到的地址即为操作数的有效地址。相对寻址指令举

1 / 39
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功