单片机与嵌入式系统:第4章ARM7TDMI(-S)指令系统_第1页
单片机与嵌入式系统:第4章ARM7TDMI(-S)指令系统_第2页
单片机与嵌入式系统:第4章ARM7TDMI(-S)指令系统_第3页
单片机与嵌入式系统:第4章ARM7TDMI(-S)指令系统_第4页
单片机与嵌入式系统:第4章ARM7TDMI(-S)指令系统_第5页
已阅读5页,还剩260页未读 继续免费阅读

下载本文档

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

文档简介

1、第第4 4章章 ARM7TDMI(-S) ARM7TDMI(-S) 指令系统指令系统西安交通大学西安交通大学单片机与嵌入式系统单片机与嵌入式系统2013/3/242第第4章章 ARM7TDMI(-S)指令系统指令系统 简介简介2013/3/243第第4章章 ARM7TDMI(-S)指令系统指令系统 ARM指令集与指令集与Thumb指令集的关系指令集的关系Thumb指令集指令集具有灵活、小具有灵活、小巧的特点巧的特点ARM指令集支指令集支持持ARM核所有核所有的特性,具有高的特性,具有高效、快速的特点效、快速的特点2013/3/244第第4 4章章 目录目录 1. ARM处理器寻址方式处理器寻址

2、方式 2. 指令集介绍指令集介绍2013/3/2454.1 ARM处理器寻址方式处理器寻址方式 寻址方式分类寻址方式分类1 寄存器寻址寄存器寻址5 基址寻址基址寻址2 立即寻址立即寻址6 多寄存器寻址多寄存器寻址3 寄存器移位寻址寄存器移位寻址7 堆栈寻址堆栈寻址4 寄存器间接寻址寄存器间接寻址8 块拷贝寻址块拷贝寻址9 相对寻址相对寻址2013/3/2464.1 ARM处理器寻址方式处理器寻址方式 1、寄存器寻址、寄存器寻址2013/3/2474.1 ARM处理器寻址方式处理器寻址方式 2、立即寻址、立即寻址2013/3/2484.1 ARM处理器寻址方式处理器寻址方式 3、寄存器移位寻址、

3、寄存器移位寻址2013/3/2494.1 ARM处理器寻址方式处理器寻址方式 4、寄存器间接寻址、寄存器间接寻址2013/3/24104.1 ARM处理器寻址方式处理器寻址方式 5、基址寻址、基址寻址2013/3/24114.1 ARM处理器寻址方式处理器寻址方式 6、多寄存器寻址、多寄存器寻址2013/3/24124.1 ARM处理器寻址方式处理器寻址方式 7、堆栈寻址、堆栈寻址2013/3/24134.1 ARM处理器寻址方式处理器寻址方式 7、堆栈寻址、堆栈寻址栈底栈底栈顶栈顶栈区栈区SP堆栈存堆栈存储区储区栈顶栈顶栈底栈底栈区栈区SP向下向下增长增长向上向上增长增长0 x1234567

4、80 x12345678堆栈压栈堆栈压栈堆栈压栈堆栈压栈2013/3/2414栈顶栈顶SP栈顶栈顶SP栈底栈底空堆栈空堆栈栈底栈底满堆栈满堆栈4.1 ARM处理器寻址方式处理器寻址方式 7、堆栈寻址、堆栈寻址0 x123456780 x12345678栈顶栈顶SP0 x12345678栈顶栈顶SP压栈压栈压栈压栈2013/3/24154.1 ARM处理器寻址方式处理器寻址方式 7、堆栈寻址、堆栈寻址2013/3/24164.1 ARM处理器寻址方式处理器寻址方式 8、块拷贝寻址、块拷贝寻址2013/3/24174.1 ARM处理器寻址方式处理器寻址方式 9、相对寻址、相对寻址2013/3/24

5、18;文件名:文件名:TEST1.S ;功能:功能: 实现两个寄存器相加实现两个寄存器相加 ;说明:说明: 使用使用ARMulate软件仿真调试软件仿真调试 AREA Example1,CODE,READONLY ;声明代码段声明代码段Example1 ENTRY ;标识程序入口标识程序入口 CODE32 ;声明声明32位位ARM指令指令START MOVR0,#0;设置参数设置参数 MOVR1,#10LOOP BLADD_SUB;调用子程序调用子程序ADD_SUB BLOOP;跳转到跳转到LOOPADD_SUB ADDSR0,R0,R1 ;R0 = R0 + R1 MOVPC,LR ;子程序

6、返回子程序返回 ;文件结束文件结束 简单的简单的ARM程序程序使用使用“;”进行注释进行注释标号顶格写标号顶格写实际代码段实际代码段声明文件结束声明文件结束2013/3/2419第第4章章 目录目录 1. ARM处理器寻址方式处理器寻址方式 2. 指令集介绍指令集介绍2013/3/24204.2.1 ARM指令集指令集 1.指令格式指令格式 2.条件码条件码 3.存储器访问指令存储器访问指令 4.数据处理指令数据处理指令 5.乘法指令乘法指令 6.ARM分支指令分支指令 7.协处理器指令协处理器指令 8.杂项指令杂项指令 9.伪指令伪指令2013/3/24211、指令格式、指令格式 ARM指令

7、的基本格式如下:指令的基本格式如下: 号内是必须的,号内是必须的,号内是可选的。各项说明为:号内是可选的。各项说明为:2013/3/24221、指令格式、指令格式 第第2个操作数个操作数2013/3/24231、指令格式、指令格式 1)#immed_8r常数表达式常数表达式循环右移10位0 x120 0 0 1 0 0 1 00 x000 0 0 0 0 0 0 00 x000 0 0 0 0 0 0 00 x000 0 0 0 0 0 0 00 x000 0 0 0 0 0 0 00 x000 0 0 0 0 0 0 00 x801 0 0 0 0 0 0 00 x040 0 0 0 0 1

8、 0 08位常数2013/3/24241、指令格式、指令格式 2)Rm寄存器方式寄存器方式2013/3/24251、指令格式、指令格式 3)Rm,shift寄存器移位方式寄存器移位方式操作码操作码说明说明操作码操作码说明说明ASR #n算术右移算术右移n位位ROR #n循环右移循环右移n位位LSL #n逻辑左移逻辑左移n位位RRX带扩展的循环右移带扩展的循环右移1位位LSR #n逻辑右移逻辑右移n位位Type RsType为移位的一种类型,为移位的一种类型,Rs为偏移量寄存为偏移量寄存器,低器,低8位有效。位有效。2013/3/24261、指令格式、指令格式 3)Rm,shift寄存器移位方式

9、寄存器移位方式LSL移位操作:移位操作:0LSR移位操作:移位操作:0ASR移位操作:移位操作:ROR移位操作:移位操作:RRX移位操作移位操作:C2013/3/24271、指令格式、指令格式 3)Rm,shift寄存器移位方式寄存器移位方式2013/3/24284.2.1 ARM指令集指令集 1.指令格式指令格式 2.条件码条件码 3.存储器访问指令存储器访问指令 4.数据处理指令数据处理指令 5.乘法指令乘法指令 6.ARM分支指令分支指令 7.协处理器指令协处理器指令 8.杂项指令杂项指令 9.伪指令伪指令2013/3/24292、条件码、条件码 ARM指令的基本格式如下:指令的基本格式

10、如下: 使用条件码使用条件码“cond”可以实现高效的逻辑操作,提高可以实现高效的逻辑操作,提高代码效率。代码效率。 所有的所有的ARM指令都可以条件执行,指令都可以条件执行, Thumb指令只有指令只有B指令指令具有条件执行具有条件执行 功能。功能。 如果不标明条件代码,则默认为无条件执行。如果不标明条件代码,则默认为无条件执行。2013/3/2430指指令令条条件件码码表表操作码操作码条件助记符条件助记符标志标志含义含义0000EQZ=1相等相等0001NEZ=0不相等不相等0010CS/HSC=1无符号数大于或等于无符号数大于或等于0011CC/LOC=0无符号数小于无符号数小于0100

11、MIN=1负数负数0101PLN=0正数或零正数或零0110VSV=1溢出溢出0111VCV=0没有溢出没有溢出1000HIC=1&Z=0无符号数大于无符号数大于1001LSC=0&Z=1无符号数小于或等于无符号数小于或等于1010GEN=V有符号数大于或等于有符号数大于或等于 1011LTN!=V有符号数小于有符号数小于 1100GTZ=0,N=V有符号数大于有符号数大于 1101LEZ=1,N!=V有符号数小于或等于有符号数小于或等于 1110AL任何任何无条件执行无条件执行 (指令默认条件指令默认条件) 1111NV任何任何从不执行从不执行(不要使用不要使用) 2013/3/24312、

12、条件码、条件码 示例:示例:C代码:代码:If(a b)a+;Elseb+;对应的汇编代码:对应的汇编代码:CMP R0,R1 ;R0与与R1比较比较ADDHI R0,R0,#1;若若R0R1,则,则R0=R0+1ADDLS R1,R1,#1;若若R01,则,则R1=R1+12013/3/24324.2.1 ARM指令集指令集 1.指令格式指令格式 2.条件码条件码 3.存储器访问指令存储器访问指令 4.数据处理指令数据处理指令 5.乘法指令乘法指令 6.ARM分支指令分支指令 7.协处理器指令协处理器指令 8.杂项指令杂项指令 9.伪指令伪指令2013/3/24333、存储器访问指令、存储器

13、访问指令 ARM处理器是典型的处理器是典型的RISC处理器,对存储器的访处理器,对存储器的访问只能使用加载和存储指令实现。问只能使用加载和存储指令实现。 ARM处理器是冯处理器是冯诺依曼存储结构,程序空间、诺依曼存储结构,程序空间、RAM空间及空间及I/O映射空间统一编址,除对映射空间统一编址,除对RAM操作操作以外,对外围以外,对外围IO、程序数据的访问均要通过加载、程序数据的访问均要通过加载/存存储指令进行。储指令进行。 存储器访问指令分为:存储器访问指令分为:2013/3/2434助记符助记符说明说明操作操作条件码位置条件码位置LDR Rd,addressing 加载字数据加载字数据Rd

14、addressing,addressing索引索引LDRcondLDRB Rd,addressing 加载无符号字节数据加载无符号字节数据Rdaddressing,addressing索引索引LDRcondBLDRH Rd, addressing 加载无符号半字数据加载无符号半字数据Rdaddressing,addressing索引索引LDRcondHLDRSB Rd, addressing 加载有符号字节数据加载有符号字节数据Rdaddressing,addressing索引索引LDRcondSBLDRSH Rd, addressing加载有符号半字数据加载有符号半字数据 Rdaddress

15、ing,addressing索引索引 LDRcondSH LDRT Rd,addressing以用户模式加载字数据以用户模式加载字数据Rdaddressing,addressing索引索引LDRcondTLDRBT Rd, addressing 以用户模式加载无符号以用户模式加载无符号字节数据字节数据Rdaddressing,addressing索引索引LDRcondBT3、存储器访问指令、存储器访问指令2013/3/2435助记符助记符说明说明操作操作条件码位置条件码位置STR Rd,addressing 存储字数据存储字数据RdaddressingRdaddressing,addressi

16、ngaddressing索引索引STRcondSTRcondSTRB Rd,addressing 存储字节数据存储字节数据Rd addressingRd addressing,addressingaddressing索引索引STRcondBSTRcondBSTRH Rd, addressing 存储半字数据存储半字数据Rd addressingRd addressing,addressingaddressing索引索引STRcondHSTRcondHSTRT Rd,addressing以用户模式存储以用户模式存储字数据字数据Rd addressingRd addressing,addressi

17、ngaddressing索引索引STRcondTSTRcondTSTRBT Rd, addressing 以用户模式存储以用户模式存储字节数据字节数据Rd addressingRd addressing,addressingaddressing索引索引STRcondBTSTRcondBTLDMmode Rn!,reglist 多寄存器多寄存器加载加载reglistRn.reglistRn.,RnRn回写等回写等LDMcondmodeLDMcondmodeSTMmode Rn!,reglist 多寄存器存储多寄存器存储Rn.reglistRn.reglist,RnRn回写等回写等STMcondm

18、odeSTMcondmodeSWP Rd,Rm,Rn 寄存器和存储器寄存器和存储器字字数据交换数据交换RdRnRdRn,RnRm (RnRdRnRm (RnRd或或Rm)Rm)SWPcondSWPcondSWPB Rd,Rm,Rn 寄存器和存储器寄存器和存储器字节数据交换字节数据交换RdRnRdRn,RnRm (RnRdRnRm (RnRd或或Rm)Rm)SWPcondBSWPcondB3、存储器访问指令、存储器访问指令2013/3/24361)单寄存器操作指令)单寄存器操作指令 单寄存器加载存储单寄存器加载存储2013/3/2437字、无符号字节字、无符号字节的的加载加载/存储指令存储指令

19、LDR指令从内存中读取单一字或字节数据存入寄存器中指令从内存中读取单一字或字节数据存入寄存器中 STR指令将寄存器中的单一字或字节数据保存到内存指令将寄存器中的单一字或字节数据保存到内存 指令格式如下:指令格式如下: 其中,其中,T为可选后缀。表示即使在特权模式下,存储系统也为可选后缀。表示即使在特权模式下,存储系统也将访问看成是在用户模式下进行的。将访问看成是在用户模式下进行的。 T在用户模式下无效。在用户模式下无效。2013/3/2438P P表示前表示前/ /后变址后变址U U表示加表示加/ /减减B B为为1 1表示字节访问,表示字节访问,为为0 0表示字访问表示字访问W W表示回写表

20、示回写RdRd为源为源/ /目标寄存器目标寄存器RnRn为基址寄存器为基址寄存器L=0L=0存储存储L=1加载加载字、无符号字节字、无符号字节的的加载加载/存储指令存储指令指令编码格式指令编码格式I=I=0 0时,偏移量为时,偏移量为1212位立即数位立即数I I=1=1时,偏移量为寄存器移位时,偏移量为寄存器移位为指令的寻址方式为指令的寻址方式指令执行的条件码指令执行的条件码2013/3/2439 LDR/STR指令寻址非常灵活,由两部分组成,指令寻址非常灵活,由两部分组成, 地址偏移量有以下地址偏移量有以下3种格式:种格式: 字、无符号字节字、无符号字节的的加载加载/存储指令存储指令201

21、3/3/2440 从寻址方式的地址计算方法分,加载从寻址方式的地址计算方法分,加载/存储指存储指令有以下令有以下4种格式:种格式: 大多数情况下,必须保证字数据操作的地址大多数情况下,必须保证字数据操作的地址是是32位对齐的。位对齐的。字、无符号字节字、无符号字节的的加载加载/存储指令存储指令2013/3/2441半字和有符号字节半字和有符号字节的的加载存储指令加载存储指令 LDR/STR指令可指令可加载加载有符号半字或字节,可有符号半字或字节,可加载加载/存储存储无符号无符号半字。半字。 偏移量格式、寻址方式与加载偏移量格式、寻址方式与加载/存储字和无符号字节指令相同。存储字和无符号字节指令

22、相同。 注意:注意:2013/3/2442指令执行的条件码指令执行的条件码I为为0时,偏移量为时,偏移量为12位立即数,为位立即数,为1时,时,偏移量为寄存器移偏移量为寄存器移位位P表示前表示前/后变址后变址U表示加表示加/减减W表示回写表示回写为指令的寻址方式为指令的寻址方式Rd为源为源/目标寄存器目标寄存器Rn为基址寄存器为基址寄存器L用于区别加载(用于区别加载(L为为1)或存储(或存储(L为为0)S为为1表示有符号访问,表示有符号访问,为为0表示无符号访问表示无符号访问H为为1表示半字访问,为表示半字访问,为0表示字节访问表示字节访问半字和有符号字节加载存储指令半字和有符号字节加载存储指

23、令指令编码格式指令编码格式2013/3/24431)单寄存器操作指令)单寄存器操作指令 LDR和和STR指令应用示例:指令应用示例:2013/3/24442)多寄存器多寄存器操作指令操作指令 多寄存器加载多寄存器加载/存储指令可以实现在一组寄存器和一存储指令可以实现在一组寄存器和一块连续的内存单元之间传输数据。块连续的内存单元之间传输数据。 LDM为加载多个寄存器;为加载多个寄存器; STM为存储多个寄存器。为存储多个寄存器。 允许一条指令传送允许一条指令传送16个寄存器的任何子集或所有寄个寄存器的任何子集或所有寄存器。存器。 它们主要用于它们主要用于现场保护、数据复制、常数传递现场保护、数据

24、复制、常数传递等。等。2013/3/24452)多寄存器操作指令)多寄存器操作指令 加载指令格式:加载指令格式:LDMcond Rn!,reglist 存储指令格式:存储指令格式:STMcond Rn!,reglist2013/3/2446指令执行的条件码指令执行的条件码S 对 应 于 指 令 中对 应 于 指 令 中的的”符号符号P表示前表示前/后变址后变址U表示加表示加/减减W表示回写表示回写寄存器列表寄存器列表Rn为基址寄存器为基址寄存器L用于区别加载(用于区别加载(L为为1)或存储(或存储(L为为0)2)多寄存器操作指令)多寄存器操作指令 多寄存器加载多寄存器加载/存储指令编码存储指令

25、编码指令编码格式指令编码格式2013/3/24472)多寄存器操作指令)多寄存器操作指令 多寄存器加载多寄存器加载/存储指令存储指令8种模式如下表所示种模式如下表所示模式模式说明说明模式模式说明说明IA每次传送后地址加每次传送后地址加4,FD堆栈堆栈IB每次传送前地址加每次传送前地址加4,ED堆栈堆栈DA每次传送后地址减每次传送后地址减4,FA堆栈堆栈DB每次传送前地址减每次传送前地址减4,EA堆栈堆栈数据块传送操作数据块传送操作堆栈操作堆栈操作2013/3/24482)多寄存器操作指令)多寄存器操作指令 进行数据复制时使用块拷贝寻址指令进行数据复制时使用块拷贝寻址指令 进行堆栈操作操作时使用

26、堆栈寻址指令进行堆栈操作操作时使用堆栈寻址指令2013/3/2449STMIA R1!, R5-R7R5R6R7R1 R1 4008H4004H4000H4014H4010H400CHSTMIB R1!, R5-R7 R5R6R7R1 R1 4008H4004H4000H4014H4010H400CHSTMDA R1!, R5-R7 R7R6R5R1 R1 4008H4004H4000H4014H4010H400CHSTMDB R1!, R5-R7 R7R6R5R1 R1 4008H4004H4000H4014H4010H400CH2)多寄存器操作指令)多寄存器操作指令数据块传送数据块传送后加

27、后加先减先减后减后减先加先加2013/3/2450数据块传送数据块传送存储存储堆栈操作堆栈操作压栈压栈说明说明数据块传送数据块传送加载加载堆栈操作堆栈操作出栈出栈说明说明STMDASTMED空递减空递减LDMDALDMFA满递增满递增STMIASTMEA空递增空递增LDMIALDMFD满递减满递减STMDBSTMFD满递减满递减LDMDBLDMEA空递增空递增STMIBSTMFA满递增满递增LDMIBLDMED空递减空递减;使用数据块传送指令进行堆栈操作使用数据块传送指令进行堆栈操作STMDA R0!,R5-R6. . .LDMIB R0!,R5-R6;使用堆栈指令进行堆栈操作使用堆栈指令进行

28、堆栈操作STMED R0!,R5-R6. . .LDMED R0!,R5-R62)多寄存器操作指令)多寄存器操作指令堆栈操作堆栈操作两段代码的执行结果是一样的,但是使用堆栈指令的压栈和出栈操作编程很简单两段代码的执行结果是一样的,但是使用堆栈指令的压栈和出栈操作编程很简单(只要前后一致即可),而使用数据块指令进行压栈和出栈操作则需要考虑空与(只要前后一致即可),而使用数据块指令进行压栈和出栈操作则需要考虑空与满、加与减对应的问题。满、加与减对应的问题。2013/3/2451AddrR0R5, R6Addr-4Addr-8Addr-12AddrR0R5Addr-4Addr-8Addr-12R6A

29、ddrR0R5Addr-4Addr-8Addr-12R5, R6R5, R6STMDA R0!, R5 - R6 STMED R0!, R5 - R6 AddrR0R5, R6Addr-4Addr-8Addr-12AddrR0R5Addr-4Addr-8Addr-12R6AddrR0R5Addr-4Addr-8Addr-12R5, R6R5, R6LDMIB R0!, R5 - R6 LDMED R0!, R5 - R6 R5R62013/3/24523)寄存器和存储器)寄存器和存储器交换交换指令指令 SWP指令用于将一个内存单元指令用于将一个内存单元(地址在地址在Rn中中)的内容读取到一的内

30、容读取到一个寄存器个寄存器Rd中,同时将另一个寄存器中,同时将另一个寄存器Rm的内容写入到该内的内容写入到该内存单元中。存单元中。 指令格式如下:指令格式如下: 其中:其中:2013/3/2453应用示例:应用示例:SWPR1,R1,R0;将将R1的内容与的内容与R0指向的存储单元的内容进行交换指向的存储单元的内容进行交换 SWPBR1,R2,R0;将将R0指向的存储单元内的容读取一字节数据到指向的存储单元内的容读取一字节数据到R1中中;(高高24位清零位清零),并将,并将R2的内容写入到该内存单元中的内容写入到该内存单元中;(最低字节有效最低字节有效) 3)寄存器和存储器交换指令)寄存器和存

31、储器交换指令 寄存器和存储器交换指令编码寄存器和存储器交换指令编码Rm源寄存器源寄存器Rd目标寄存器目标寄存器Rn为基址寄存器为基址寄存器指令执行的条件码指令执行的条件码B用于区别无符号字节用于区别无符号字节(B为为1)或字()或字(B为为0)2013/3/24544.2.1 ARM指令集指令集 1.指令格式指令格式 2.条件码条件码 3.存储器访问指令存储器访问指令 4.数据处理指令数据处理指令 5.乘法指令乘法指令 6.ARM分支指令分支指令 7.协处理器指令协处理器指令 8.杂项指令杂项指令 9.伪指令伪指令2013/3/24554、ARM数据处理指令数据处理指令 数据处理指令大致可分为

32、数据处理指令大致可分为4类:类: 数据处理指令只能对寄存器的内容进行操作,而不数据处理指令只能对寄存器的内容进行操作,而不能对内存中的数据进行操作。能对内存中的数据进行操作。 所有所有ARM数据处理指令均可选择使用数据处理指令均可选择使用S后缀,并影后缀,并影响状态标志。响状态标志。2013/3/24564、ARM数据处理指令数据处理指令助记符助记符说明说明操作操作条件码位置条件码位置MOV Rd,operand2数据传送数据传送Rdoperand2 MOVcondSMVN Rd,operand2数据非传送数据非传送Rd(operand2)MVNcondSADD Rd, Rn, operand

33、2加法运算指令加法运算指令RdRn+operand2ADDcondSSUB Rd, Rn, operand2减法运算指令减法运算指令RdRn-operand2SUBcondSRSB Rd, Rn, operand2逆向减法指令逆向减法指令Rdoperand2-RnRSBcondSADC Rd, Rn, operand2带进位加法带进位加法RdRn+operand2+CarryADCcondSSBC Rd, Rn, operand2带进位减法指令带进位减法指令RdRn-operand2-(NOT)Carry SBCcondSRSC Rd, Rn, operand2带进位逆向减法指令带进位逆向减法

34、指令 Rdoperand2-Rn-(NOT)Carry RSCcondS2013/3/24574、ARM数据处理指令数据处理指令助记符助记符说明说明操作操作条件码位置条件码位置AND Rd,Rn,operand2逻辑与操作指令逻辑与操作指令RdRn&operand2ANDcondSORR Rd,Rn,operand2逻辑或操作指令逻辑或操作指令RdRn|operand2ORRcondSEOR Rd,Rn,operand2逻辑异或操作指令逻辑异或操作指令 RdRnoperand2EORcondSBIC Rd,Rn,operand2位清除指令位清除指令RdRn&(operand2)BICcondS

35、CMP Rn, operand2比较指令比较指令标志标志N、Z、C、VRn-operand2 CMPcondCMN Rn, operand2负数比较指令负数比较指令标志标志N、Z、C、VRn+operand2 CMNcondTST Rn, operand2位测试指令位测试指令标志标志N、Z、C、VRn&operand2 TSTcondTEQ Rn, operand2相等测试指令相等测试指令标志标志N、Z、C、VRnoperand2 TEQcond2013/3/2458 ARM数据处理指令编码格式数据处理指令编码格式指令执行的条件码指令执行的条件码I用于区别立即数(用于区别立即数(I为为1)和寄

36、存器移位)和寄存器移位(I为为0)opcode数据处理指数据处理指令操作码令操作码第二操作数第二操作数Rd目标寄存器目标寄存器Rn第一操作数寄存器第一操作数寄存器S设置条件码,与指令设置条件码,与指令中的中的S位对应位对应带进位加法带进位加法ADC0101带进位减法指令带进位减法指令SBC0110带进位逆向减法指令带进位逆向减法指令RSC0111位测试指令位测试指令TST1000相等测试指令相等测试指令TEQ1001比较指令比较指令CMP1010负数比较指令负数比较指令CMN1011逻辑或操作指令逻辑或操作指令ORR1100数据传送数据传送MOV1101位清除指令位清除指令BIC1110数据非

37、传送数据非传送MVN1111加法运算指令加法运算指令ADD0100逆向减法指令逆向减法指令RSB0011减法运算指令减法运算指令SUB0010逻辑异或操作指令逻辑异或操作指令EOR0001逻辑与操作指令逻辑与操作指令AND0000说明说明指令助记符指令助记符操作码操作码4、ARM数据处理指令数据处理指令2013/3/2459 1)数据)数据传送传送指令指令MOV MOV指令将指令将8位立即数或寄存器传送到目标寄存器位立即数或寄存器传送到目标寄存器(Rd),可用于移位运算等操作。),可用于移位运算等操作。 指令格式如下:指令格式如下: MOV指令举例如下:指令举例如下:2013/3/24601)

38、数据传送指令)数据传送指令MVN MVN指令将指令将8位立即数或寄存器(位立即数或寄存器(operand2)按位)按位取反后传送到目标寄存器(取反后传送到目标寄存器(Rd),因为其具有取反),因为其具有取反功能,所以可以装载范围更广的立即数。功能,所以可以装载范围更广的立即数。 指令格式如下:指令格式如下: MVN指令举例如下:指令举例如下:2013/3/2461 2)算术运算算术运算ADD 加法运算指令加法运算指令ADD指令将指令将operand2的值与的值与Rn的值相加,结果保存到的值相加,结果保存到Rd寄存器。寄存器。 指令格式如下:指令格式如下: 应用示例:应用示例:2013/3/24

39、62 2)算术运算)算术运算SUB 减法运算指令减法运算指令SUB指令用寄存器指令用寄存器Rn减去减去operand2,结果保存到,结果保存到Rd中。中。 指令格式如下:指令格式如下: 应用示例:应用示例:2013/3/2463 2)算术运算)算术运算RSB 逆向减法运算指令逆向减法运算指令RSB指令将指令将operand2的值减去的值减去Rn,结果保存到,结果保存到Rd中。中。 指令格式如下:指令格式如下: 应用示例:应用示例:2013/3/2464 2)算术运算)算术运算ADC 带进位加法指令带进位加法指令ADC将将operand2的值与的值与Rn的值的值相加,再加上相加,再加上CPSR中

40、的中的C,结果保存到,结果保存到Rd寄存器。寄存器。 指令格式如下:指令格式如下: 应用示例(使用应用示例(使用ADC实现实现64位加法,结果存于位加法,结果存于R1、R0中):中):2013/3/2465 带进位减法指令带进位减法指令SBC用寄存器用寄存器Rn减去减去operand2,再减去再减去CPSR中的中的C条件标志位的非条件标志位的非(即若即若C=0,则结,则结果减去果减去1),结果保存到,结果保存到Rd中。中。 指令格式如下:指令格式如下: 应用示例(使用应用示例(使用SBC实现实现64位减法,结果存于位减法,结果存于R1、R0中):中):2)算术运算)算术运算SBC2013/3/

41、24662)算术运算)算术运算RSC 带进位逆向减法指令带进位逆向减法指令RSC指令用寄存器指令用寄存器operand2减去减去Rn,再减去,再减去CPSR中的中的C条件标志位,条件标志位,结果保存到结果保存到Rd中。中。 指令格式如下:指令格式如下: 应用示例(使用应用示例(使用RSC指令实现求指令实现求64位数值的负数位数值的负数 )2013/3/24673)逻辑运算逻辑运算指令指令AND 逻辑与操作指令逻辑与操作指令AND指令将指令将operand2的值与寄的值与寄存器存器Rn的值按位作逻辑的值按位作逻辑“与与”操作,结果保存到操作,结果保存到Rd。 指令格式如下:指令格式如下: 应用示

42、例:应用示例:2013/3/24683)逻辑运算指令)逻辑运算指令ORR 逻辑或操作指令逻辑或操作指令ORR指令将指令将operand2的值与寄的值与寄存器存器Rn的值按位作逻辑的值按位作逻辑“或或”操作,结果保存到操作,结果保存到Rd。 指令格式如下:指令格式如下: 应用示例:应用示例: 2013/3/24693)逻辑运算指令)逻辑运算指令EOR 逻辑异或操作指令逻辑异或操作指令EOR指令将指令将operand2的值与的值与寄存器寄存器Rn的值按位作逻辑的值按位作逻辑“异或异或”操作,结果保存操作,结果保存到到Rd中。中。 指令格式如下:指令格式如下: 应用示例:应用示例:2013/3/24

43、703)逻辑运算指令)逻辑运算指令BIC 位清除指令位清除指令BIC指令将寄存器指令将寄存器Rn的值与的值与operand2的值的的值的反码反码按位作逻辑按位作逻辑“与与”操作,结果操作,结果保存到保存到Rd中。中。 指令格式如下:指令格式如下: 应用示例:应用示例:2013/3/24714)比较指令比较指令CMP 比较指令比较指令CMP指令将寄存器指令将寄存器Rn的值减去的值减去operand2的值,的值,根据操作的结果更新根据操作的结果更新CPSR中的相应条件标志位,以便后面中的相应条件标志位,以便后面的指令根据相应的条件标志来判断是否执行。的指令根据相应的条件标志来判断是否执行。 指令格

44、式如下:指令格式如下: 应用示例:应用示例: 注意:注意:CMP指令不保存运算结果,常用指令不保存运算结果,常用CMP指令及相应的指令及相应的条件码来判断两个数据的大小。条件码来判断两个数据的大小。2013/3/24724)比较指令)比较指令CMN 负数比较指令负数比较指令CMN指令使用寄存器指令使用寄存器Rn的值加上的值加上operand2的值,根据操作的结果更新的值,根据操作的结果更新CPSR中的相应条件标志位,以便中的相应条件标志位,以便后面的指令根据相应的条件标志来判断是否执行。后面的指令根据相应的条件标志来判断是否执行。 指令格式如下:指令格式如下: 应用示例:应用示例: 注意:注意

45、:CMN指令不保存运算结果。指令不保存运算结果。CMN指令可用于负数比指令可用于负数比较。较。2013/3/24734)比较指令)比较指令TST 位测试指令位测试指令TST指令将寄存器指令将寄存器Rn的值与的值与operand2的值按的值按位作逻辑位作逻辑“与与”操作,影响更新操作,影响更新CPSR中的相应条件标志位。中的相应条件标志位。 指令格式如下:指令格式如下: 应用示例:应用示例: 注意:注意:TST指令不保存运算结果。指令不保存运算结果。TST指令通常与指令通常与EQ、NE条件码配合使用,当所有测试位均为条件码配合使用,当所有测试位均为0时,时,EQ有效,否则有效,否则NE有效。有效

46、。2013/3/24744)比较指令)比较指令TEQ 相等测试指令相等测试指令TEQ指令将寄存器指令将寄存器Rn的值与的值与operand2的值按位的值按位作逻辑作逻辑“异或异或”操作,影响更新操作,影响更新CPSR中的相应条件标志位。中的相应条件标志位。 指令格式如下:指令格式如下: 应用示例:应用示例: 注意:注意:TEQ指令不保存运算结果。使用指令不保存运算结果。使用TEQ进行相等测试时,进行相等测试时,常与常与EQ、NE条件码配合使用。当两个数据相等时,条件码配合使用。当两个数据相等时,EQ有效;有效;否则否则NE有效。有效。2013/3/24754.2.1 ARM指令集指令集 1.指

47、令格式指令格式 2.条件码条件码 3.存储器访问指令存储器访问指令 4.数据处理指令数据处理指令 5.乘法指令乘法指令 6.ARM分支指令分支指令 7.协处理器指令协处理器指令 8.杂项指令杂项指令 9.伪指令伪指令2013/3/24765、乘法指令、乘法指令 ARM7TDMI具有三种乘法指令,分别为:具有三种乘法指令,分别为:2013/3/2477助记符助记符说明说明操作操作条件码位置条件码位置MUL Rd,Rm,Rs32位乘法指令位乘法指令RdRm*Rs (RdRm)MULcondSMLA Rd,Rm,Rs,Rn32位乘加指令位乘加指令RdRm*Rs+Rn (RdRm)MLAcondSUM

48、ULL RdLo,RdHi,Rm,Rs64位无符号乘法指令位无符号乘法指令(RdLo,RdHi) Rm*Rs UMULLcondSUMLAL RdLo,RdHi,Rm,Rs64位无符号乘加指令位无符号乘加指令(RdLo,RdHi) Rm*Rs+(RdLo,RdHi)UMLALcondSSMULL RdLo,RdHi,Rm,Rs64位有符号乘法指令位有符号乘法指令(RdLo,RdHi) Rm*RsSMULLcondSSMLAL RdLo,RdHi,Rm,Rs64位有符号乘加指令位有符号乘加指令(RdLo,RdHi) Rm*Rs+(RdLo,RdHi)SMLALcondS5、乘法指令、乘法指令20

49、13/3/2478指令执行的条件码指令执行的条件码Opcode乘法指令操乘法指令操作码作码S设置条件码,与指设置条件码,与指令中的令中的S位对应位对应Rm为被乘数寄存器为被乘数寄存器Rd/RdLo为为MLA指令相指令相加的寄存器或加的寄存器或64位乘法位乘法指令的目标寄存器(低指令的目标寄存器(低32位)位)Rn/RdHi为目标寄为目标寄存器或存器或64位乘法指位乘法指令 的 目 标 寄 存 器令 的 目 标 寄 存 器(高(高32位)位)Rs为乘数寄存器为乘数寄存器64位有符号乘加指令位有符号乘加指令SMLAL11164位有符号乘法指令位有符号乘法指令SMULL11064位无符号乘加指令位无

50、符号乘加指令UMLAL10164位无符号乘法指令位无符号乘法指令UMULL10032位乘加指令位乘加指令MLA00132位乘法指令位乘法指令MUL000说明说明指令助记符指令助记符操作码操作码opcode操作码功能表操作码功能表5、乘法指令、乘法指令指令编码格式指令编码格式2013/3/2479 32位乘法指令位乘法指令MUL指令将指令将Rm和和Rs中的中的值相乘,结果的低值相乘,结果的低32位保存到位保存到Rd中。中。 指令格式如下:指令格式如下: 应用示例:应用示例:1)3232位乘法指令位乘法指令MUL2013/3/24802)3232位乘加指令位乘加指令MLA 32位乘加指令位乘加指令

51、MLA指令将指令将Rm和和Rs中的中的值相乘,再将乘积加上第值相乘,再将乘积加上第3个操作数,结果的个操作数,结果的低低32位保存到位保存到Rd中。中。 指令格式如下:指令格式如下: 应用示例:应用示例:2013/3/24813)64位无符号乘法指令位无符号乘法指令UMULL 64位无符号乘法指令位无符号乘法指令UMULL指令将指令将Rm和和Rs中的值作无符号数相乘,结果的低中的值作无符号数相乘,结果的低32位位保存到保存到RdLo中,而高中,而高32位保存到位保存到RdHi中。中。 指令格式如下:指令格式如下: 应用示例:应用示例:2013/3/2482 64位无符号乘加指令位无符号乘加指令

52、UMLAL指令将指令将Rm和和Rs中中的值作无符号数相乘,的值作无符号数相乘,64位乘积与位乘积与RdHi、RdLo相相加,结果的低加,结果的低32位保存到位保存到RdLo中,而高中,而高32位保存到位保存到RdHi中。中。 指令格式如下:指令格式如下: 应用示例:应用示例:4)64位无符号乘加指令位无符号乘加指令UMLAL2013/3/24835)64位有符号乘法指令位有符号乘法指令SMULL 64位有符号乘法指令位有符号乘法指令SMULL指令将指令将Rm和和Rs中的值作有符号数相乘,结果的低中的值作有符号数相乘,结果的低32位位保存到保存到RdLo中,而高中,而高32位保存到位保存到RdH

53、i中。中。 指令格式如下:指令格式如下: 应用示例:应用示例:2013/3/24846)64位有符号乘加指令位有符号乘加指令SMLAL 64位有符号乘加指令位有符号乘加指令SMLAL指令将指令将Rm和和Rs中中的值作有符号数相乘,的值作有符号数相乘,64位乘积与位乘积与RdHi、RdLo相相加,结果的低加,结果的低32位保存到位保存到RdLo中,而高中,而高32位保存到位保存到RdHi中。中。 指令格式如下:指令格式如下: 应用示例:应用示例:2013/3/24854.2.1 ARM指令集指令集 1.指令格式指令格式 2.条件码条件码 3.存储器访问指令存储器访问指令 4.数据处理指令数据处理

54、指令 5.乘法指令乘法指令 6.ARM分支指令分支指令 7.协处理器指令协处理器指令 8.杂项指令杂项指令 9.伪指令伪指令2013/3/24866、ARM分支指令分支指令 在在ARM中有两种方式可以实现程序的跳转,中有两种方式可以实现程序的跳转, 分支指令有以下三种:分支指令有以下三种:2013/3/2487助记符助记符说明说明操作操作条件码位置条件码位置B label分支指令分支指令PClabelBcondBL label带链接的分支指令带链接的分支指令LRPC-4,PClabelBLcondBX Rm带状态切换的分支带状态切换的分支指令指令PClabel,切换处理,切换处理器状态器状态B

55、Xcond6、ARM分支指令分支指令2013/3/24886、ARM分支指令分支指令指令编码格式指令编码格式分支指令分支指令B/BL指令编码格式指令编码格式B指令则指令则L=0而而BL指令则指令则L=1指令执行的条件码指令执行的条件码24位有符号立即数偏移量位有符号立即数偏移量分支指令分支指令BX指令编码格式指令编码格式指令执行的条件码指令执行的条件码Rm目标地址寄存器,目标地址寄存器,该寄存器装载跳转地址该寄存器装载跳转地址2013/3/2489 分支指令分支指令B指令,该指令跳转范围限制在当前指指令,该指令跳转范围限制在当前指令的令的32M字节地址内字节地址内(ARM指令为字对齐,最低指令

56、为字对齐,最低2位地址固定为位地址固定为0)。 指令格式如下:指令格式如下: 应用示例:应用示例:6、ARM分支指令分支指令B2013/3/24906、ARM分支指令分支指令BL 带链接的分支指令带链接的分支指令BL指令适用于子程序调用,指令适用于子程序调用,使用该指令后,下一条指令的地址被拷贝到使用该指令后,下一条指令的地址被拷贝到R14(即即LR) 连接寄存器中,然后跳转到指定地址运行。跳连接寄存器中,然后跳转到指定地址运行。跳转范围限制在当前指令的转范围限制在当前指令的32M字节地址内。字节地址内。 指令格式如下:指令格式如下: 应用示例:应用示例:2013/3/2491BL Label

57、xxxxxxLabelxxxMOV PC,LRAddr1Addr2xxxxxxLRPCAddr1LabelAddr2Addr21.当程序执行到当程序执行到BL跳转跳转指令时,硬件将下一条指令时,硬件将下一条指令的地址指令的地址Addr2装入装入LR寄存器,并把跳转地寄存器,并把跳转地址装入程序计数器(址装入程序计数器(PC)2. 程序跳转到目标地址程序跳转到目标地址Label继续执行,当子程继续执行,当子程序执行结束后,将序执行结束后,将LR寄寄存器内容存入存器内容存入PC,返回,返回调用函数继续执行调用函数继续执行6、ARM分支指令分支指令BL2013/3/2492 带状态切换的分支指令带状

58、态切换的分支指令BX指令,该指令可以根据跳转地指令,该指令可以根据跳转地址(址(Rm)的最低位来切换处理器状态。其跳转范围限制在)的最低位来切换处理器状态。其跳转范围限制在当前指令的当前指令的32M字节地址内字节地址内(ARM指令为字对齐,最低指令为字对齐,最低2位位地址固定为地址固定为0)。 指令格式如下指令格式如下: 应用示例:应用示例:跳转地址跳转地址Rm0跳转后跳转后CPSR标志标志T位位处理器状态处理器状态00ARM11Thumb6、ARM分支指令分支指令BX2013/3/24934.2.1 ARM指令集指令集 1.指令格式指令格式 2.条件码条件码 3.存储器访问指令存储器访问指令

59、 4.数据处理指令数据处理指令 5.乘法指令乘法指令 6.ARM分支指令分支指令 7.协处理器指令协处理器指令 8.杂项指令杂项指令 9.伪指令伪指令2013/3/24947、协处理器指令、协处理器指令 ARM内核支持协处理器操作,协处理器的控内核支持协处理器操作,协处理器的控制要通过协处理器命令实现。制要通过协处理器命令实现。ARM内核与协处理器的关系内核与协处理器的关系ARM内核内核协处理器协处理器A协处理器协处理器B握手信号握手信号数据地址总线数据地址总线2013/3/2495助记符助记符说明说明操作操作条件码位置条件码位置CDP coproc,opcode1,CRd,CRn,CRm,o

60、pcode2协处理器数据操作指令协处理器数据操作指令取决于协取决于协处理器处理器CDPcondLDCL coproc, CRd, 协处理器数据读取指令协处理器数据读取指令取决于协取决于协处理器处理器LDCcondLSTCL coproc, CRd,协处理器数据写入指令协处理器数据写入指令取决于协取决于协处理器处理器STCcondLMCR coproc,opcode1,Rd,CRn,CRm,opcode2ARM寄存器到协处理寄存器到协处理器寄存器的数据传送指器寄存器的数据传送指令令取决于协取决于协处理器处理器MCRcondMRC coproc,opcode1,Rd,CRn,CRm,opcode2

温馨提示

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

最新文档

评论

0/150

提交评论