版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章第三章 ARMARM指令系统指令系统第三章 ARM指令系统学习目标学习目标 1 1理解并掌握理解并掌握ARMARM汇编语言寻址方式汇编语言寻址方式 2 2掌握掌握ARMARM各类指令定义和使用各类指令定义和使用 3 3掌握掌握ThumbThumb各类指令定义和使用各类指令定义和使用 4 4掌握汇编伪指令的定义和使用掌握汇编伪指令的定义和使用 5 5掌握汇编程序设计方法掌握汇编程序设计方法 6 6掌握汇编程序调试方法掌握汇编程序调试方法第三章 ARM指令系统3.1 ARM3.1 ARM指令系统概述指令系统概述 ARM9ARM9处理器支持两种指令集,即处理器支持两种指令集,即3232位的位的
2、ARMARM指令集和指令集和1616位位ThumbThumb指令集。指令集。 ARM ARM微处理器的指令集是加载微处理器的指令集是加载/ /存储型的,存储型的,即指令集仅能处理寄存器中的数据,而且处理结即指令集仅能处理寄存器中的数据,而且处理结果都要放回寄存器中,而对系统存储器的访问则果都要放回寄存器中,而对系统存储器的访问则需要专门的加载需要专门的加载/ /存储指令来完成存储指令来完成。第三章 ARM指令系统3.1 ARM3.1 ARM指令系统概述指令系统概述 ARMARM指令集按指令功能通常分为五类:指令集按指令功能通常分为五类:跳转指令跳转指令存储器访问指令存储器访问指令数据处理指令数
3、据处理指令协处理器指令协处理器指令软件中断指令软件中断指令 跳转指令: :用于控制程序的执行流程、指令的特权等级和在ARM代码与Thumb代码之间进行转换; 存储器访问指令: :用于控制在存储器和寄存器之间的数据传输、交换、加载/存储; 数据处理指令: :用于操作片上的ALU、桶型移位器、乘法器以完成在31个32位的通用寄存器之间的高速数据处理; 协处理器指令: :用于控制外部的协处理器,以开放统一的方式用于片外功能指令集; 软件中断指令:SWI实现软件中断,可以访问用户模式下受限制的资源。第三章 ARM指令系统3.1 ARM3.1 ARM指令系统概述指令系统概述 ARM ARM指令代码是指令
4、代码是3232位的,可以分五个区域:位的,可以分五个区域:位位31:2831:28条件代码域,条件代码域,4 4位条件码,位条件码,1616种组合;种组合;位位27:2027:20指令代码域,除了指令编码外还包含指令代码域,除了指令编码外还包含 几个重要的指令特征位和可选后缀的编码;几个重要的指令特征位和可选后缀的编码;位位19:1619:16地址基址地址基址RnRn域,为域,为R0R0R15R15共共1616个个 寄存器的编码;寄存器的编码;位位15:1215:12目标或源寄存器目标或源寄存器RdRd域;域;位位11:011:0地址偏移或操作寄存器、操作数区域;地址偏移或操作寄存器、操作数区
5、域; 第三章 ARM指令系统3.1 ARM3.1 ARM指令系统概述指令系统概述 指令集格式按照行依次为:数据处理指令集格式按照行依次为:数据处理/ /PSRPSR状态转状态转换、乘法、长乘、数据交换、分支与交换、半字存取换、乘法、长乘、数据交换、分支与交换、半字存取寄存器偏移、半字存取立即数偏移、单数据存取、未寄存器偏移、半字存取立即数偏移、单数据存取、未定义、数据块存取、分支、协处理器数据操作、协处定义、数据块存取、分支、协处理器数据操作、协处理器寄存器传送和软中断。理器寄存器传送和软中断。 第三章 ARM指令系统3.3.2 ARM2 ARM指令寻址方式指令寻址方式 寻址方式就是处理器根据
6、指令中给出寻址方式就是处理器根据指令中给出的地址码字段来实现寻找真实操作数地址的地址码字段来实现寻找真实操作数地址的方式。的方式。ARM9ARM9处理器支持九种基本寻址方处理器支持九种基本寻址方式。式。 第三章 ARM指令系统3.3.2 ARM2 ARM指令寻址方式指令寻址方式 立即数寻址也称为立即寻址,指令地址立即数寻址也称为立即寻址,指令地址码就是操作数本身。码就是操作数本身。 立即数在指令中要以立即数在指令中要以“#”“#”为前缀,十为前缀,十六进制表示的立即数,六进制表示的立即数, “#” “#”后面跟后面跟“0“0 x”x”或或“&”“&”;二进制表示的立即数,;二进
7、制表示的立即数, “#” “#”后后面加上面加上“0“0b”b”;十进制表示的立即数,十进制表示的立即数,“#”“#”后面加上后面加上“0“0d”d”或缺省或缺省 。 例如:例如:MOV R1MOV R1,#0 x01#0 x01;1.1.立即数寻址立即数寻址 第三章 ARM指令系统3.3.2 ARM2 ARM指令寻址方式指令寻址方式 2.2.寄存器寻址寄存器寻址 寄存器寻址方式,把寄存器中的数值作寄存器寻址方式,把寄存器中的数值作为操作数,指令执行时直接取出寄存器值进为操作数,指令执行时直接取出寄存器值进行操作。行操作。 该寻址方式是一种执行效率较高的寻址该寻址方式是一种执行效率较高的寻址方
8、式。方式。例如:例如:MOV R1MOV R1,R2R2;R1R2R1R2ADD R0ADD R0,R1R1,R2R2 ;R0 R1+R2R0 R1+R2第三章 ARM指令系统3.3.2 ARM2 ARM指令寻址方式指令寻址方式 3.3.寄存器移位寻址寄存器移位寻址 寄存器移位寻址是操作数由寄存器的值寄存器移位寻址是操作数由寄存器的值做相应移位而得到做相应移位而得到, ,移位的方式在指令中以助移位的方式在指令中以助记符的形式给出记符的形式给出, ,而移位的位数可用立即数或而移位的位数可用立即数或寄存器寻址方式表示。寄存器寻址方式表示。 例如:例如:ADDADDR0R0,R1R1,R2R2,LS
9、L #1LSL #1;R2R2的值向左移一位,所得的的值向左移一位,所得的 值与值与R1R1加,结果存入加,结果存入R0R0MOVMOVR0R0,R1R1,LSL R3LSL R3;将将R1R1中的值向左移位,移位次数由中的值向左移位,移位次数由 R3R3中的值决定,结果存入中的值决定,结果存入R0R0中。中。第三章 ARM指令系统3.3.2 ARM2 ARM指令寻址方式指令寻址方式 3.3.寄存器移位寻址寄存器移位寻址 移位操作在移位操作在ARMARM指令集中不作为单独的指令使用,指令集中不作为单独的指令使用,ARMARM指令集共有指令集共有5 5种位移操作:种位移操作:LSLLSL逻辑左移
10、,寄存器中字的低位空出位补逻辑左移,寄存器中字的低位空出位补0 0;LSRLSR逻辑右移,寄存器中字的高位空出位补逻辑右移,寄存器中字的高位空出位补0 0;ASRASR算术右移,移位过程中保持符号位不变,即若源操作算术右移,移位过程中保持符号位不变,即若源操作 数为正数,则字的高位空出位补数为正数,则字的高位空出位补0 0,否则补,否则补1 1;RORROR循环右移,由字的低位移出位填入字的高位空出位;循环右移,由字的低位移出位填入字的高位空出位;RRXRRX带扩展的循环右移,操作数右移一位高位空出位用带扩展的循环右移,操作数右移一位高位空出位用 原原C C标志值填充;标志值填充;第三章 AR
11、M指令系统3.3.2 ARM2 ARM指令寻址方式指令寻址方式 3.3.寄存器移位寻址寄存器移位寻址 31 0ASR移位操作31 0ROR移位操作31 0RRX移位操作C图图3.2 移位操作示意图移位操作示意图31 0LSL移位操作031 0LSR移位操作0第三章 ARM指令系统3.3.2 ARM2 ARM指令寻址方式指令寻址方式 寄存器间接寻址是指操作数放在存储单元寄存器间接寻址是指操作数放在存储单元中,地址又是通过寄存器给出的,即寄存器为中,地址又是通过寄存器给出的,即寄存器为操作数的地址指针。操作数的地址指针。 ARMARM的传送指令都是基于寄存器的间接寻的传送指令都是基于寄存器的间接寻
12、址,即通过址,即通过Load/StoreLoad/Store完成对数据的传送操作。完成对数据的传送操作。例如:例如:LDR LDR R0R0,R4R4;R0R4R0R44.4.寄存器间接寻址寄存器间接寻址第三章 ARM指令系统3.3.2 ARM2 ARM指令寻址方式指令寻址方式 基址加偏移寻址也称为变址寻址,将基址基址加偏移寻址也称为变址寻址,将基址寄存器的值与指令中给出的偏移量相加,形成寄存器的值与指令中给出的偏移量相加,形成操作数的有效地址。操作数的有效地址。 基址寻址用于访问基址附近的存储单元,基址寻址用于访问基址附近的存储单元,常用于查表、数据操作及功能部件寄存器访问常用于查表、数据操
13、作及功能部件寄存器访问等。等。 变址寻址方式可分为前变址、自动变址和变址寻址方式可分为前变址、自动变址和后变址寻址方式。后变址寻址方式。5.5.基址加偏移寻址基址加偏移寻址 第三章 ARM指令系统3.3.2 ARM2 ARM指令寻址方式指令寻址方式 (1 1)前变址模式前变址模式LDR R1LDR R1,R2R2,#05#05;基址寄存器基址寄存器R2R2的值的值+5+5后所指后所指 向的存储单元的值送到寄存器向的存储单元的值送到寄存器R1R15.5.基址加偏移寻址基址加偏移寻址 第三章 ARM指令系统3.3.2 ARM2 ARM指令寻址方式指令寻址方式 (2 2)自动变址模式)自动变址模式L
14、DR R0LDR R0,R1R1,#4#4!;R0memR0mem3232R1+4,R1R1+4R1+4,R1R1+4 叹号表示在完成数据传送后将更新基址寄叹号表示在完成数据传送后将更新基址寄存器的值,更新的方式是每执行完一次操作基存器的值,更新的方式是每执行完一次操作基址寄存器自动加上前变址的字节数。址寄存器自动加上前变址的字节数。5.5.基址加偏移寻址基址加偏移寻址 第三章 ARM指令系统3.3.2 ARM2 ARM指令寻址方式指令寻址方式 (3 3)后变址模式)后变址模式LDR R0LDR R0,R1R1,#4#4;R0memR0mem3232R1 R1 ,R1R1+4R1R1+4 不再
15、需要叹号,因为立即数偏移量的唯一不再需要叹号,因为立即数偏移量的唯一用途是作为基址寄存器的修复量。用途是作为基址寄存器的修复量。5.5.基址加偏移寻址基址加偏移寻址 第三章 ARM指令系统3.3.2 ARM2 ARM指令寻址方式指令寻址方式 (4 4)偏移地址)偏移地址LDR R0LDR R0,R1R1,R2R2;R0memR0mem3232R1+R2R1+R25.5.基址加偏移寻址基址加偏移寻址 第三章 ARM指令系统3.3.2 ARM2 ARM指令寻址方式指令寻址方式 6.6.多寄存器寻址多寄存器寻址 一条指令可以完成多个寄存器值的传送,一条指令可以完成多个寄存器值的传送,一次最多可传一次
16、最多可传1616个通用寄存器的值。个通用寄存器的值。例:例:LDMIA R0LDMIA R0!,!,R1-R4 R1-R4 ;R1R0 R2R0+4R1R0 R2R0+4 R3R0+8 R3R0+8、R4R0+12R4R0+12 指令中后缀指令中后缀IAIA表示在每次完成加载操作后,表示在每次完成加载操作后,R0R0按字长度增加,因此可将连续存储单元的值按字长度增加,因此可将连续存储单元的值传送到传送到R1-R4R1-R4。第三章 ARM指令系统3.3.2 ARM2 ARM指令寻址方式指令寻址方式 7.7.堆栈寻址堆栈寻址 堆栈是一块用于保存数据的连续内存,是堆栈是一块用于保存数据的连续内存,
17、是按后进先出的原则存取数据的存储区。指向堆按后进先出的原则存取数据的存储区。指向堆栈的地址寄存器称为堆栈指针栈的地址寄存器称为堆栈指针SPSP,堆栈的访问堆栈的访问是通过堆栈指针控制的,指针所指向单元是栈是通过堆栈指针控制的,指针所指向单元是栈顶。顶。第三章 ARM指令系统3.3.2 ARM2 ARM指令寻址方式指令寻址方式 7.7.堆栈寻址堆栈寻址 在在ARMARM指令中,堆栈寻址通过指令中,堆栈寻址通过Load/StoreLoad/Store指指令来实现。令来实现。例如:例如:STMFD SPSTMFD SP!,!,R1-R7R1-R7,LRLR;将将R1R1R7R7,LRLR入栈,入栈,
18、 满递减堆栈满递减堆栈LDMFD SPLDMFD SP!,!,R1-R7R1-R7,LRLR;数据出栈,放入数据出栈,放入R1R1R7R7, LR LR寄存器寄存器第三章 ARM指令系统3.3.2 ARM2 ARM指令寻址方式指令寻址方式 7.7.堆栈寻址堆栈寻址 在在ThumbThumb指令中,堆栈寻址通过指令中,堆栈寻址通过PUSH/POPPUSH/POP指指令来实现。令来实现。例如:例如:PUSH R1-R7PUSH R1-R7,LR LR ;将将R1R1R7R7,LRLR入栈入栈POP R1-R7POP R1-R7,PCPC ;数据出栈,放入数据出栈,放入R1R1R7R7,PCPC寄存
19、器寄存器第三章 ARM指令系统3.3.2 ARM2 ARM指令寻址方式指令寻址方式 8.8.相对寻址相对寻址 相对寻址是基址寻址的一种变通方式,与基相对寻址是基址寻址的一种变通方式,与基址寻址方式基本相似。相对寻址以程序计数器址寻址方式基本相似。相对寻址以程序计数器PCPC的当前值为基地址,指令中的地址标号作为偏移的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到的操作数的有效地址。量,将两者相加之后得到的操作数的有效地址。例如:例如: BL NEXTBL NEXT;跳转到子程序跳转到子程序NEXTNEXT处执行处执行 NEXT MOV R0 NEXT MOV R0,#1 #1
20、MOV PC MOV PC,LRLR;从子程序返回从子程序返回 第三章 ARM指令系统3.3.2 ARM2 ARM指令寻址方式指令寻址方式 9.9.块复制寻址块复制寻址 块复制寻址可实现连续地址数据从存储器的某块复制寻址可实现连续地址数据从存储器的某一位置到另一位置。一位置到另一位置。例如:例如:STMIA R0STMIA R0!,!,R1R1R7R7;将将R1R1R7R7的数据保存到存储器中。存储指针的数据保存到存储器中。存储指针 在保存第一个值后增加,增加方向为向上增长在保存第一个值后增加,增加方向为向上增长STMIB R0STMIB R0!,!,R1R1R7R7;将将R1R1R7R7的数
21、据保存到存储器中。存储指针的数据保存到存储器中。存储指针 在保存在保存第一个值前增加,增加方向为向上增长第一个值前增加,增加方向为向上增长STMDA R0STMDA R0!,!,R1R1R7R7;将将R1R1R7R7的数据保存到存储器中。存储指针在的数据保存到存储器中。存储指针在 保存第一个值后增加,增加方向为向下增长保存第一个值后增加,增加方向为向下增长STMDB R0STMDB R0!,!,R1R1R7 R7 ;将将R1R1R7R7的数据保存到存储器中。存储指针的数据保存到存储器中。存储指针 在保存在保存第一个值前增加,增加方向为向下增长第一个值前增加,增加方向为向下增长第三章 ARM指令
22、系统3.3 ARM3.3 ARM指令集指令集 ARMARM指令集可以分为指令集可以分为:跳转指令跳转指令数据处理指令数据处理指令寄存器访问指令寄存器访问指令加载加载/ /存储指令存储指令协处理器指令协处理器指令异常产生指令异常产生指令伪指令七大类伪指令七大类第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3.1 3.3.1 分支指令分支指令ARMARM有两种方式实现跳转:有两种方式实现跳转:一种是使用跳转指令直接跳转;一种是使用跳转指令直接跳转;另一种则是直接向另一种则是直接向PCPC寄存器赋值实现跳转;寄存器赋值实现跳转;第三章 ARM指令系统3.3 ARM3.3 ARM
23、指令集指令集 3.3.1 3.3.1 分支指令分支指令跳转指令有四条:跳转指令有四条:跳转指令跳转指令B B带链接的跳转指令带链接的跳转指令BLBL状态切换的跳转指令状态切换的跳转指令BXBX返回和状态切换的跳转指令返回和状态切换的跳转指令BLXBLX第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3.1 3.3.1 分支指令分支指令1 1B B指令格式:指令格式:B condB cond label label condcond表示指令执行条件表示指令执行条件 labellabel表示有符号地址,相对当前表示有符号地址,相对当前PCPC偏移量偏移量功能:跳转到指定地址执行
24、,地址范围限制功能:跳转到指定地址执行,地址范围限制在当前指令的在当前指令的32MB32MB范围范围第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3.1 3.3.1 分支指令分支指令1 1B B例如例如:BACKWARDBACKWARDCMP R1CMP R1,#0 #0 ;比较比较R1R1和和0 0BEQ FORWARDBEQ FORWARD ;若若=0=0跳转到跳转到FORWARDFORWARD SUB R1SUB R1,R2R2,#3#3FORWARDFORWARDADD R1ADD R1,R2R2,#4#4B BACKWARDB BACKWARD;跳转到跳转到BA
25、CKWARDBACKWARD第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3.1 3.3.1 分支指令分支指令2 2BLBL指令格式:指令格式:BLcondBLcond label labelcondcond表示指令执行条件表示指令执行条件labellabel表示有符号地址,相对当前表示有符号地址,相对当前PCPC偏移量偏移量 功能:带链接的跳转指令。指令将下一条指令功能:带链接的跳转指令。指令将下一条指令的地址复制到的地址复制到R14R14(即(即LRLR)链接寄存器中,然后)链接寄存器中,然后跳转到指定地址运行程序跳转到指定地址运行程序第三章 ARM指令系统3.3 A
26、RM3.3 ARM指令集指令集 3.3.1 3.3.1 分支指令分支指令2 2BLBL例如:例如:BL FUNCBL FUNC;保护断点,跳转到子程序;保护断点,跳转到子程序ADD R1ADD R1,R2R2,#2#2;子程序调用后返回执行的语句;子程序调用后返回执行的语句 FUNCFUNC;子程序;子程序 ;子程序代码;子程序代码MOV R15MOV R15,R14R14;复制返回地址到;复制返回地址到PCPC,实现子程序的返回,实现子程序的返回第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3.1 3.3.1 分支指令分支指令3 3BXBX指令格式:指令格式:BXcon
27、d RmBXcond Rmcondcond表示指令执行条件表示指令执行条件RmRm 寄存器,值是寄存器,值是绝对地址值,不是偏移量,在指令执行后,绝对地址值,不是偏移量,在指令执行后,RmRm中中的地址值被复制到程序计数器的地址值被复制到程序计数器PCPC Rm0Rm0为为1 1时,强制程序从时,强制程序从ARMARM指令状态跳转到指令状态跳转到ThumbThumb指令状态指令状态Rm0Rm0为为0 0时,强制程序从时,强制程序从Thumb Thumb 指令状态跳转到指令状态跳转到ARMARM指令状态指令状态功能:功能: 跳转到指令中所指定的目标地址,并实跳转到指令中所指定的目标地址,并实现状
28、态切换现状态切换第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3.1 3.3.1 分支指令分支指令3 3BXBX例如:例如:CODE32 CODE32 ;3232位编码位编码 ARM1ARM1LDR R0LDR R0,=Thumb1+#1=Thumb1+#1;把;把ThumbThumb地址赋给地址赋给R0R0,末位置,末位置1 1MOV LR,PC MOV LR,PC ;设置返回地址;设置返回地址BX R0 BX R0 ;跳转,切换状态;跳转,切换状态 ADD R1,R2,#2ADD R1,R2,#2CODE16 CODE16 ;1616位编码位编码Thumb1Thumb
29、1 ADD R1ADD R1,R3,#1 R3,#1 ;ThumbThumb程序程序BX LR BX LR ;跳转到返回地址,状态切换;跳转到返回地址,状态切换第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3.1 3.3.1 分支指令分支指令4 4BLXBLX指令格式:指令格式:BLXcond labelBLXcond labelRmRmcondcond表示指令执行条件表示指令执行条件labellabel表示有符号地址,相对当前表示有符号地址,相对当前PCPC偏移量偏移量 RmRm 寄存器,值是寄存器,值是绝对地址值,不是偏移量,在指令执行后,绝对地址值,不是偏移量,在指
30、令执行后,RmRm中中的地址值被复制到程序计数器的地址值被复制到程序计数器PCPC Rm0Rm0为为1 1时,强制程序从时,强制程序从ARMARM指令状态跳转到指令状态跳转到ThumbThumb指令状态指令状态Rm0Rm0为为0 0时,强制程序从时,强制程序从Thumb Thumb 指令状态跳转到指令状态跳转到ARMARM指令状态指令状态功能:功能: 跳转到指令中所指定的目标地址,实现跳转到指令中所指定的目标地址,实现状态切换,同时将状态切换,同时将R15R15的值保存到的值保存到R14R14中中第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3.1 3.3.1 分支指令分
31、支指令4 4BLXBLX例如:例如:CODE32 CODE32 ;3232位编码位编码 ARM1ARM1LDR R0LDR R0,=Thumb1+#1=Thumb1+#1;把;把ThumbThumb地址赋给地址赋给R0R0,末位置,末位置1 1;MOV LR,PC MOV LR,PC 设置返回地址,此条指令注销设置返回地址,此条指令注销BLX R0 BLX R0 ;跳转,切换状态,;跳转,切换状态, LR PC LR PC ADD R1,R2,#2ADD R1,R2,#2CODE16 CODE16 ;1616位编码位编码Thumb1Thumb1 ADD R1ADD R1,R3,#1 R3,#1
32、 ;ThumbThumb程序程序BX LR BX LR ;跳转到返回地址,状态切换;跳转到返回地址,状态切换第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3.2 3.3.2 数据处理指令数据处理指令 数据处理指令大致可分为数据处理指令大致可分为4 4类类: :数据传送指令数据传送指令算术逻辑运算指令算术逻辑运算指令比较指令比较指令乘法指令乘法指令 ARMARM指令使用三地址模式,操作数和结果在指指令使用三地址模式,操作数和结果在指令中分别指定,所有的操作数和结果都是令中分别指定,所有的操作数和结果都是3232位宽,位宽,则结果为则结果为3232位宽,一般不采用位宽,一般不
33、采用R15R15作为操作数寄存作为操作数寄存器。器。说明:数据处理指令只能对寄存器的内容进行操作。所有ARM数据处理指令均可选择使用S后缀,以影响状态标志。比较指令CMP、CMN、TST和TEQ不需要后缀S,它们会直接影响状态标志。第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3.2 3.3.2 数据处理指令数据处理指令 数据传送指令可在寄存器和存储器之间进行数据传送指令可在寄存器和存储器之间进行数据的双向传输;算术逻辑运算指令完成常用的数据的双向传输;算术逻辑运算指令完成常用的算术与逻辑的运算,不但将运算结果保存在目标算术与逻辑的运算,不但将运算结果保存在目标寄存器中,
34、同时更新寄存器中,同时更新CPSRCPSR中的相应条件标志位;中的相应条件标志位;比较指令只更新比较指令只更新CPSRCPSR中相应的条件标志位,不保中相应的条件标志位,不保存运算结果。存运算结果。第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3.2 3.3.2 数据处理指令数据处理指令 第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3.2 3.3.2 数据处理指令数据处理指令 1.1.数据传送指令数据传送指令 数据传送指令有:数据传送指令有:MOVMOVMVNMVN 用在寄存器之间进行数据和数据取反传用在寄存器之间进行数据和数据取反传送,也用在寄存
35、器与第二操作数之间进行数送,也用在寄存器与第二操作数之间进行数据和数据取反传送。据和数据取反传送。第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3.2 3.3.2 数据处理指令数据处理指令 1.1.数据传送指令数据传送指令(1)MOV(1)MOV指令格式指令格式:MOV condSMOV condS Rd,operand2 Rd,operand2RdRd表示目标寄存器表示目标寄存器为源操作数为源操作数S S选项决定操作结果是否影响选项决定操作结果是否影响CPSRCPSR中条件标志位中条件标志位功能:将源操作数传送到目的寄存器中功能:将源操作数传送到目的寄存器中第三章 AR
36、M指令系统3.3 ARM3.3 ARM指令集指令集 3.3.2 3.3.2 数据处理指令数据处理指令 1.1.数据传送指令数据传送指令(1)MOV(1)MOV例如:例如:MOV R1MOV R1,R0R0MOV PCMOV PC,R14R14;常用于子程序返回常用于子程序返回MOV R1MOV R1,#5#5MOVS R3MOVS R3,R1R1,LSL#2LSL#2;R3=R12R3=R110R110,则执行,则执行ADDGTADDGT指令,指令,R0+5R0+5第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3.2 3.3.2 数据处理指令数据处理指令 3.3.比较测试
37、指令比较测试指令 (2)CMN(2)CMN指令格式:指令格式:CMNcondCMNcond S Rn,operand2 S Rn,operand2RnRn表示操作数寄存器表示操作数寄存器operand2operand2可以是寄存器或立即数可以是寄存器或立即数功能:取反比较指令。把功能:取反比较指令。把RnRn寄存器的内容和另寄存器的内容和另一个操作数一个操作数operand2operand2作取反后比较,同时更新作取反后比较,同时更新CPSRCPSR中条件标志位的值,但不存储结果,只是中条件标志位的值,但不存储结果,只是刷新刷新CPSRCPSR条件标志位条件标志位第三章 ARM指令系统3.3
38、ARM3.3 ARM指令集指令集 3.3.2 3.3.2 数据处理指令数据处理指令 3.3.比较测试指令比较测试指令 (2)CMN(2)CMN例如:例如:CMN R0CMN R0,R1R1CMN ROCMN RO,#10#10第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3.2 3.3.2 数据处理指令数据处理指令 3.3.比较测试指令比较测试指令 (3)TST(3)TST指令格式:指令格式:TSTcondTSTcond S Rn,operand2 S Rn,operand2RnRn表示操作数寄存器表示操作数寄存器operand2operand2可以是寄存器或立即数可以是
39、寄存器或立即数功能:位测试指令。把寄存器功能:位测试指令。把寄存器RnRn与第与第2 2操作数按操作数按位进行逻辑与运算,不保留结果,刷新位进行逻辑与运算,不保留结果,刷新CPSRCPSR条条件标志位,常用来测试指定位件标志位,常用来测试指定位 第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3.2 3.3.2 数据处理指令数据处理指令 3.3.比较测试指令比较测试指令 (3)TST(3)TST例如:例如:TST R1TST R1,#3#3;测试测试R0R0值第值第0 0位和位和1 1位是否为位是否为1 1第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.
40、3.2 3.3.2 数据处理指令数据处理指令 3.3.比较测试指令比较测试指令 (4)TEQ(4)TEQ指令格式:指令格式:TEQcondTEQcond S Rn,operand2 S Rn,operand2RnRn表示操作数寄存器表示操作数寄存器operand2operand2可以是寄存器或立即数可以是寄存器或立即数功能:相等测试指令。用于把寄存器的内容与功能:相等测试指令。用于把寄存器的内容与第二操作数进行按位异或运算,不保留结果,第二操作数进行按位异或运算,不保留结果,但更新但更新CPSRCPSR条件标志位,常用来比较操作数条件标志位,常用来比较操作数1 1和和操作数操作数2 2是否相等
41、是否相等 第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3.2 3.3.2 数据处理指令数据处理指令 3.3.比较测试指令比较测试指令 (4)TEQ(4)TEQ例如:例如:TEQ R1TEQ R1,R2R2第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3.2 3.3.2 数据处理指令数据处理指令 4.4.乘法指令乘法指令 按照运算结果乘法指令可分为两类,分别按照运算结果乘法指令可分为两类,分别是是3232位和位和6464位。指令中的所有操作数、目标寄位。指令中的所有操作数、目标寄存器必须为通用寄存器,不能对操作数使用立存器必须为通用寄存器,不能对操作
42、数使用立即数或被移位的寄存器,同时,目标寄存器和即数或被移位的寄存器,同时,目标寄存器和操作数操作数1 1必须是不同的寄存器。必须是不同的寄存器。 只保留只保留3232位结果的乘法指令,不需要区分位结果的乘法指令,不需要区分有无符号数,因为无论是否有符号,结果的最有无符号数,因为无论是否有符号,结果的最低有效低有效3232位是一样的。位是一样的。 第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3.2 3.3.2 数据处理指令数据处理指令 4.4.乘法指令乘法指令 第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3.2 3.3.2 数据处理指令数据处理指
43、令 4.4.乘法指令乘法指令 (1)MUL(1)MUL指令格式:指令格式:MULcond S Rd,Rm,RsMULcond S Rd,Rm,RsRdRd表示存储操作数结果的目标寄存器表示存储操作数结果的目标寄存器RmRm是指存储第是指存储第1 1个操作数的通用寄存器个操作数的通用寄存器RsRs是指存储第是指存储第2 2个操作数的通用寄存器个操作数的通用寄存器功能:功能:3232位乘法指令位乘法指令,将,将RmRm和和RsRs中的值相乘,中的值相乘,结果的低结果的低3232位保存到位保存到RdRd中中 ,即,即RdRmRdRm* *Rs Rs (RdRmRdRm)第三章 ARM指令系统3.3
44、ARM3.3 ARM指令集指令集 3.3.2 3.3.2 数据处理指令数据处理指令 4.4.乘法指令乘法指令 (1)MUL(1)MUL例如:例如:MULS R0MULS R0,R1R1,R2R2;R0=R1R0=R1* *R2R2,同时设置,同时设置CPSRCPSR中相关条件标志中相关条件标志MUL R0MUL R0,R1R1,R2 R2 ;R0=R1R0=R1* *R2R2第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3.2 3.3.2 数据处理指令数据处理指令 4.4.乘法指令乘法指令 (2)MLA(2)MLA指令格式:指令格式:MLAcond S Rd,Rm,Rs,
45、RnMLAcond S Rd,Rm,Rs,RnRdRd表示存储操作数结果的目标寄存器表示存储操作数结果的目标寄存器RmRm是指存储第是指存储第1 1个操作数的通用寄存器个操作数的通用寄存器RsRs是指存储第是指存储第2 2个操作数的通用寄存器个操作数的通用寄存器RnRn是指存储第是指存储第3 3个操作数的通用寄存器个操作数的通用寄存器功能:功能:3232位乘加指令位乘加指令,将,将RmRm和和RsRs相乘,再将乘相乘,再将乘积加上第积加上第3 3个操作数个操作数RnRn,结果的低结果的低3232位保存到位保存到RdRd中中 第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3
46、.2 3.3.2 数据处理指令数据处理指令 4.4.乘法指令乘法指令 (2)MLA(2)MLA例如:例如:MLA R0MLA R0,R1R1,R2R2,R3 R3 ;R0=R1R0=R1* *R2+R3R2+R3MLAS R0MLAS R0,R1R1,R2R2,R3 R3 ;R0=R1R0=R1* *R2+R3R2+R3,且设置标志位且设置标志位第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3.2 3.3.2 数据处理指令数据处理指令 4.4.乘法指令乘法指令 (3)UMULL(3)UMULL指令格式:指令格式:UMULL condS RdLo, RdHi, Rm,RsU
47、MULL condS RdLo, RdHi, Rm,RsRdLoRdLo、RdHiRdHi、RmRm、RsRs为除了为除了R15R15的寄存器的寄存器RdLoRdLo是加法操作低位,用来存放低位结果值是加法操作低位,用来存放低位结果值RdHiRdHi是加法操作数高位,用来存放高位结果值是加法操作数高位,用来存放高位结果值RmRm是存放乘法因子的第是存放乘法因子的第1 1通用寄存器通用寄存器RsRs是存放乘法因子的第是存放乘法因子的第2 2通用寄存器通用寄存器功能功能:无符号数:无符号数6464位长乘指令。将位长乘指令。将RmRm与与RsRs相乘,结果相乘,结果的低的低3232位放置到目标寄存器
48、位放置到目标寄存器RdLoRdLo中,高中,高3232位放置到目位放置到目标寄存器标寄存器RdHiRdHi中中 第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3.2 3.3.2 数据处理指令数据处理指令 4.4.乘法指令乘法指令 (3)UMULL(3)UMULL例如:例如:UMULL R0UMULL R0,R1R1,R2R2,R3R3;R0=R0=(R2R2* *R3R3)低)低3232位位 ;R1=R1=(R2R2* *R3R3)高)高3232位位第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3.2 3.3.2 数据处理指令数据处理指令 4.4.乘
49、法指令乘法指令 (4)UMLAL(4)UMLAL指令格式:指令格式:UMLAL condS RdLo, RdHi, Rm,RsUMLAL condS RdLo, RdHi, Rm,RsRdLoRdLo、RdHiRdHi、RmRm、RsRs为除了为除了R15R15的寄存器的寄存器RdLoRdLo是加法操作低位,用来存放低位结果值是加法操作低位,用来存放低位结果值RdHiRdHi是加法操作数高位,用来存放高位结果值是加法操作数高位,用来存放高位结果值RmRm是存放乘法因子的第是存放乘法因子的第1 1通用寄存器通用寄存器RsRs是存放乘法因子的第是存放乘法因子的第2 2通用寄存器通用寄存器功能功能:
50、无符号数:无符号数6464位长乘加指令。将位长乘加指令。将RmRm与与RsRs相乘,再相乘,再加上加上6464位原目标寄存器值,结果的低位原目标寄存器值,结果的低3232位放置到目标位放置到目标寄存器寄存器RdLoRdLo中,高中,高3232位放置到目标寄存器位放置到目标寄存器RdHiRdHi中中 第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3.2 3.3.2 数据处理指令数据处理指令 4.4.乘法指令乘法指令 (4)UMLAL(4)UMLAL例如:例如:UMLAL R0UMLAL R0,R1R1,R2R2,R3 R3 ;R0=R0=(R2R2R3R3)的低的低3232
51、位位+ +R0R0, R1= R1=(R2R2R3R3)的高的高3232位位+ +R1R1第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3.2 3.3.2 数据处理指令数据处理指令 4.4.乘法指令乘法指令 (5)SMULL(5)SMULL指令格式:指令格式:SMULL condS RdLo, RdHi, Rm,RsSMULL condS RdLo, RdHi, Rm,RsRdLoRdLo、RdHiRdHi、RmRm、RsRs为除了为除了R15R15的寄存器的寄存器RdLoRdLo是加法操作低位,用来存放低位结果值是加法操作低位,用来存放低位结果值RdHiRdHi是加法操
52、作数高位,用来存放高位结果值是加法操作数高位,用来存放高位结果值RmRm是存放乘法因子的第是存放乘法因子的第1 1通用寄存器通用寄存器RsRs是存放乘法因子的第是存放乘法因子的第2 2通用寄存器通用寄存器功能功能:有符号数:有符号数6464位长乘指令。将位长乘指令。将RmRm与与RsRs相乘,结果相乘,结果的低的低3232位放置到目标寄存器位放置到目标寄存器RdLoRdLo中,高中,高3232位放置到目位放置到目标寄存器标寄存器RdHiRdHi中中 第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3.2 3.3.2 数据处理指令数据处理指令 4.4.乘法指令乘法指令 (5)
53、SMULL(5)SMULL例如:例如:SMULL R0SMULL R0,R1R1,R2R2,R3R3;R0=R0=(R2R2* *R3R3)低)低3232位位 ;R1=R1=(R2R2* *R3R3)高)高3232位位第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3.2 3.3.2 数据处理指令数据处理指令 4.4.乘法指令乘法指令 (6)SMLAL(6)SMLAL指令格式:指令格式:SMLAL condS RdLo, RdHi, Rm,RsSMLAL condS RdLo, RdHi, Rm,RsRdLoRdLo、RdHiRdHi、RmRm、RsRs为除了为除了R15R
54、15的寄存器的寄存器RdLoRdLo是加法操作低位,用来存放低位结果值是加法操作低位,用来存放低位结果值RdHiRdHi是加法操作数高位,用来存放高位结果值是加法操作数高位,用来存放高位结果值RmRm是存放乘法因子的第是存放乘法因子的第1 1通用寄存器通用寄存器RsRs是存放乘法因子的第是存放乘法因子的第2 2通用寄存器通用寄存器功能:功能:有符号数有符号数6464位长乘加指令。将位长乘加指令。将RmRm与与RsRs相乘,结相乘,结果再分别加上目标寄存器值,低果再分别加上目标寄存器值,低3232位放置到目标寄存位放置到目标寄存器器RdLoRdLo中,高中,高3232位放置到目标寄存器位放置到目
55、标寄存器RdHiRdHi中中 第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3.2 3.3.2 数据处理指令数据处理指令 4.4.乘法指令乘法指令 (6)SMLAL(6)SMLAL例如:例如:SMLAL R0SMLAL R0,R1R1,R2R2,R3 R3 ;R0=R0=(R2R2R3R3)的低的低3232位位+ +R0R0 R1= R1=(R2R2R3R3)的高的高3232位位+ +R1R1 第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3.2 3.3.2 数据处理指令数据处理指令 4.4.乘法指令乘法指令 说明:说明:乘法指令乘法指令不支持第不支
56、持第2 2操作数为立即数操作数为立即数结果寄存器不能与第一源寄存器相同结果寄存器不能与第一源寄存器相同RdRd、RdHiRdHi、RdLoRdLo不能与不能与RmRm为同一寄存器为同一寄存器RdHiRdHi、RdLoRdLo不能为同一寄存器不能为同一寄存器避免将避免将R15R15定义为任一操作数或结果寄存器定义为任一操作数或结果寄存器CPSRCPSR状态寄存器的设置是任意的,在指令中被状态寄存器的设置是任意的,在指令中被S S位所控制位所控制 第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3.3.3.3 3 移位移位指令指令 ARM ARM微处理器内嵌的桶形移位寄存器,支
57、持微处理器内嵌的桶形移位寄存器,支持数据的各种移位操作。但移位操作在数据的各种移位操作。但移位操作在ARMARM指令集指令集中不作为单独的指令使用,只能作为指令格式中中不作为单独的指令使用,只能作为指令格式中的一个字段,在汇编语言中表示为指令中的选项。的一个字段,在汇编语言中表示为指令中的选项。 例如,数据处理指令的第二个操作数为寄存例如,数据处理指令的第二个操作数为寄存器时,就可以加入移位操作选项对它进行各种移器时,就可以加入移位操作选项对它进行各种移位操作。位操作。 第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3.3.3.3 3 移位移位指令指令 第三章 ARM指令
58、系统3.3 ARM3.3 ARM指令集指令集 3.3.3.3.3 3 移位移位指令指令 LSLLSL指令格式:指令格式:RmRm,LSLoplLSL oplopl可以是非可以是非R15R15的寄存器的寄存器RsRs,也可以是立即数,也可以是立即数,1opl321opl32功能:逻辑左移,将功能:逻辑左移,将RmRm寄存器值按寄存器值按oplopl所指定的所指定的数量向左逻辑移位,末位填数量向左逻辑移位,末位填0 0。每左移一位相当。每左移一位相当于无符号乘以于无符号乘以2 2逻辑左移与算术左移功能是一样的,所以逻辑左移与算术左移功能是一样的,所以ASLASL指指令等价于令等价于LSLLSL指令
59、。指令。第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3.3.3.3 3 移位移位指令指令 LSLLSL例如:例如:设设R0=0 x00000000R0=0 x00000000,R1=0 x80000004R1=0 x80000004,执行下列,执行下列指令后,指令后,R0R0和和R1R1值有何变化?值有何变化?MOV R0MOV R0,R1R1,LSL#1LSL#1第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3.3.3.3 3 移位移位指令指令 LSRLSR指令格式:指令格式:RmRm,LSRoplLSR oplopl可以是非可以是非R15R15
60、的寄存器的寄存器RsRs,也可以是立即数,也可以是立即数,1opl321opl32功能:逻辑右移,将功能:逻辑右移,将RmRm寄存器值按寄存器值按oplopl所指定的所指定的数量向右逻辑移位,空出的高位填数量向右逻辑移位,空出的高位填0 0。每右移一。每右移一位相当于无符号除以位相当于无符号除以2 2第三章 ARM指令系统3.3 ARM3.3 ARM指令集指令集 3.3.3.3.3 3 移位移位指令指令 LSRLSR例如:设例如:设R0=0 xFFFFFFFF,R1=0 x00000001,R0=0 xFFFFFFFF,R1=0 x00000001,执行执行下列指令后,下列指令后,R0R0和和R1R1有何变化
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 施工安全草原生态失延度安全为延度安全管理制度
- 涵洞消防安全管理规定
- 地下室防水施工方案
- 工装项目设计方案
- 2026 育儿儿童团队冲突解决课件
- 夏季安全警示教育
- 基坑工程安全教育培训大纲
- 2026年信托机构客服经理客户关系管理考核要点
- 2026年自然语言处理技术与人工智能应用检测题
- 2026年字节跳动AI面试商业化广告销售技巧
- 武汉市2026届高三年级四月供题(武汉四调)物理+答案
- 2026年反兴奋剂检查官考试兴奋剂检查违规情形识别题
- 2026年医疗三基三严知识考前冲刺测试卷含完整答案详解(必刷)
- 2025-2026学年湖北武汉市江汉区九年级下册3月适应性训练语文试题 含答案
- (2025年)无人机考试复习题库附答案详解
- 银川市、石嘴山市、吴忠市三市2026年高三年级学科教学质量检测数学+答案
- 静脉导管常见并发症临床护理实践指南
- 医药公司反贿赂管理制度
- 盘扣式双排落地式脚手架施工方案
- GB 12801-2025生产过程安全基本要求
- 陌拜流程课件
评论
0/150
提交评论