arm的指令系统

上传人:suns****4568 文档编号:88889530 上传时间:2019-05-12 格式:PPT 页数:88 大小:643.50KB
返回 下载 相关 举报
arm的指令系统_第1页
第1页 / 共88页
arm的指令系统_第2页
第2页 / 共88页
arm的指令系统_第3页
第3页 / 共88页
arm的指令系统_第4页
第4页 / 共88页
arm的指令系统_第5页
第5页 / 共88页
点击查看更多>>
资源描述

《arm的指令系统》由会员分享,可在线阅读,更多相关《arm的指令系统(88页珍藏版)》请在金锄头文库上搜索。

1、ARM嵌入式体系结构与接口技术 第3章 ARM的指令系统,目录,一、ARM指令格式 二、寻址方式 二、ARM指令后缀,一、ARM指令格式,汇编指令由操作码字段和操作数字段两部分组成。 操作码字段指示处理器所要执行的操作; 操作数字段指出在指令执行操作的过程中所需要的操作数。,指令的一般格式:,操作码一般由指令助记符码、条件码等组成。操作数字段可以有两个或者三个,第一个操作数为目的操作数,后面的操作数为源操作数。,基本格式如下:, cond S ,operand2,其中:,opcode 指令助记符,如LDR. STR等。 cond 执行条件,如EQ、NE等。 S 是否影响CPSR寄存器的值,书写

2、时影响CPSR Rd 目标寄存器。 Rn 第一个操作数的寄存器。 operand2 第二个操作数。,在这格式里, 符号内的项是必须的, 符号内的项是可选的。,一、ARM指令格式,指令格式举例,LDR R0,R1 ;读取R1地址上的存储器单元内容,即R0R1,无条件执行 BEQ Lable ;跳转指令B,执行条件EQ,即相等则程序跳转到Lable处 ADD R1,R1,R2 ;加法指令,R1 + R2R1,即R1 + R2的结果送给R1 ADDS R1,R1,#1 ;加法指令,R1 + 1R1,并影响状态寄存器(S),第3条指令的R2和第4条指令的#1都是第二操作数。 第二操作数可以是: 8位立

3、即数,或者8位图立即数; 寄存器值,或者寄存器的值移位得到的新数值。,ARM处理器具有6种基本寻址方式: 立即寻址; 寄存器寻址; 寄存器移位寻址; 寄存器间接寻址; 基址寻址; 多寄存器寻址。,二、寻址方式,操作数直接存放在指令中,紧跟在操作码之后,它作为指令的一部分存放在代码段里。立即寻址方式经常用于给寄存器赋初值。 例:立即寻址举例,SUB R0,R0,#1 ;将R0减1,结果放入R0 MOV R0,#0xFF ;将立即数0xFF装入R0寄存器,2.1 立即寻址,2.2 寄存器寻址,寄存器寻址是指:操作数的值在寄存器中,指令中的地址码字段指出的是寄存器的编号,指令执行时直接取出寄存器值来

4、操作。 例:寄存器寻址举例,MOV R1, R2 ;将R2的值存入R1中,寄存器移位寻址是ARM指令集特有的寻址方式,只能对操作数使用。,2.3 寄存器移位寻址,MOV R0,R1,LSL #3 ;R1的值左移3位,结果放入R0,即R0=R18 ANDS R1,R1,R2,LSL R3 ;R2的值左移R3位,然后和R1相“与”操作, ;结果放入R1中,LSL 逻辑左移(Logical Shift Left ),寄存器中字的低端空出的位补0; LSR 逻辑右移(Logical Shift Right),寄存器中字的高端空出的位补0; ASR 算术右移(Arithmetic Shift Right

5、 ),移位过程中保持符号位不变; ROR 循环右移(ROtate Right ),由字的低端移出的位填入字的高端; RRX 带扩展的循环右移(Rotate Right eXtended by 1 place ),操作数右移1位, 高端空出的位用原C标志值填充,C标志值用移出的最低位填充。,移位操作示意图,2.4 寄存器间接寻址,LDR R1,R2 ;将R2指向的存储单元的数据读出,即R2R1 ADD R1,R2,R3 ;将R3指向的存储单元的数据与R2相加, ;结果保存在R1中,寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号,寄存器为操作数的地址指针。,例:寄存器间接寻址举例,2.5

6、 基址寻址,基址寻址就是将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址。, 前索引基址寻址方式,基址寄存器的值不改变。,LDR R2,R3,#0x0C ; R3 + 0x0C R2,基址寄存器R3的值保持不变, 前索引基址寻址方式,基址寄存器的值发生变化。,LDR R2,R3,#0x0C!; R3 + 0x0CR2,基址寄存器 R3 = R3 + 0x0C, 后索引基址寻址,基址寄存器的值发生变化。,LDR R2,R3,#0x0C ; R3R2,基址寄存器R3 = R3 + 0x0C,2.6 多寄存器寻址,LDMIA R1!,R2-R7,R12 ;将R1指向的单元中的数据读出

7、到R2-R7、R12中 ;(每读出一个数据,R1就自动加4,指向下一个数据的物理地址),一次对多个寄存器寻址称之为多寄存器寻址。使用多寄存器寻址指令时,寄存器名的顺序是由小到大排列,连续的寄存器可用“-”链接,否则用“,”分隔书写。,三、ARM指令后缀,基本格式如下:, cond * ,operand2,其中:,cond 执行条件后缀。,* 其他后缀:S后缀、!后缀、字长后缀、索引后缀、T后缀等等,例1:指令的条件执行,无后缀(总是执行): B Lable ;程序跳转到Label运行 有后缀EQ(相等才执行): BEQ Lable ;前面运算结果相等才跳转到Label运行,例2:条件码举例 比

8、较两个值的大小,并进行加减用算,C代码为:,if (a b) a = a + b ;如果a b,则a = a + b else a = a b ;否则a = a - b,相应的ARM指令为:,CMP R0,R1 ;R0与R1比较 ADDCC R0,R0,R1 ;R0 R1时,本指令执行,2.6 条件后缀,其他后缀包括S后缀、!后缀、字长后缀、索引后缀、堆栈后缀、T后缀等等。, S后缀 使用S后缀时,指令执行后程序状态寄存器的条件标志位将刷新。,例:S后缀举例,ADD R3,R5,R8 ;R3 = R5 + R8,条件标志位不刷新 ADDS R3,R5,R8 ;R3 = R5 + R8,条件标志

9、位刷新,S后缀的使用目的:需要把此次指令执行的结果反映到条件标志位时候,就可以在这条指令的后面加上后缀S。 比较指令不需要加S后缀,在执行时会自动刷新条件标志位。,2.6 其他后缀, !后缀 !后缀表示指令执行后,基址寄存器中的地址将发生变化。 基址寄存器中的地址值(指令执行后)= 指令执行前的值 + 地址偏移量,LDMIA R1,R0,#04 ;R1 R0 + #04 LDMIA R1,R0,#04! ;R1 R0 + #04,并且R0=R0 + #04,!后缀的使用注意事项: 后缀位于表达地址的表达式后面; 地址表达式要有明确的地址偏移量。 后缀不能用在R15(PC)后面。,例:! 后缀举

10、例,2.6 其他后缀, 字长后缀 字长后缀有四个:B,H,SB,SH。这些后缀都是跟在LDR/STR存储器访问指令助记符后面,LDR R3,R0,#20 ;R3R0 + 0x20 ,所传的数据是一个无符号字 LDRB R3,R0,#20 ;R3R0 + 0x20 ,所传的数据是一个无符号字节 LDRSB R3,R0,#20 ;R3R0 + 0x20 ,所传的数据是一个有符号字节 LDRH R3,R0,#20 ;R3R0 + 0x20 ,所传的数据是一个无符号半字,例:带字长后缀的存储器加载指令,2.6 其他后缀, 索引后缀与堆栈后缀 索引后缀包括IA、IB、DA、DB; 堆栈后缀包括FD、ED

11、、FA、EA。 这些后缀用于多寄存器加载/存储指令。, T后缀 T后缀含义是:指令在特权模式下对存储器的访问,将被存储器看成是用户模式的访问。 T后缀一般只用在字传送和无符号字节传送中。,2.6 其他后缀,1.3 堆栈概念,ARM7TDMI内核中通常把寄存器R13作为堆栈栈顶指针(SP)。,栈的工作方式是“先进后出”,或称为“后进先出”。 出栈和入栈都会改变栈顶的位置。,入栈与出栈,入,出,堆栈类型,堆栈按栈顶与栈底的物理位置可分为两种: 递增堆栈:栈底的物理地址比栈顶的物理地址小。 递减堆栈:栈底的物理地址比栈顶的物理地址大。,如果堆栈指针指向最后压入堆栈的有效数据项,称为满堆栈。 如果堆栈

12、指针指向下一个待压入数据的空位置,称为空堆栈。,堆栈的四种类型: 1、满递增 2、空递增 3、满递减 4、空递减,堆栈后缀包括FA、EA、FD、ED。,字数据A以满递增堆栈为例进出栈示意图:,3.2 ARM处理器的指令集,数据操作指令,存储器访问指令,分支跳转指令,协处理器指令,状态操作指令,异常产生指令,3.2.1 数据操作指令 数据操作指令是指对存放在寄存 器中的数据进行操作的指令。包括 数据传送指令、算术指令、逻辑指 令、比较与测试指令及乘法指令。 如果在数据处理指令前使用S 前缀,指令的执行结果将会影响 CPSR中的标志位。 数据处理指令列表,右图:,3.2 ARM处理器的指令集,3.

13、2.1 数据操作指令 1MOV指令 MOV指令多用于设置初始值或者在寄存器间传送数据 (1)指令的语法格式:MOVS , (2)指令举例 MOV R0, R0 ; R0 = R0 NOP 指令 MOV R0, R0, LSL#3 ; R0 = R0 * 8 MOV PC, R14 ; 退出到调用者,用于普通函数返回,PC即是R15 MOVS PC, R14 ; 退出到调用者并恢复标志位,用于异常函数返回,3.2 ARM处理器的指令集,(3)指令的使用 将数据从一个寄存器传送到另一个寄存器 将一个常数值传送到寄存器中。 实现无算术和逻辑运算的单纯移位操作,操作数乘以2n可以用左移n位来实现 当P

14、C(R15)用作目的寄存器时,可以实现程序跳转。如“MOV PC,LR”,所以这种跳转可以实现子程序调用及从子程序返回,代替指令“B,BL” 当PC作为目标寄存器且指令中S位被设置时,指令在执行跳转操作的同时,将当前处理器模式的SPSR寄存器的内容复制到CPSR中。这种指令“MOVS PC LR”可以实现从某些异常中断中返回。,3.2.1 数据操作指令 2MVN指令 MVN指令多用于向寄存器传送一个负数或生成位掩码 (1)指令的语法格式:MNVS , (2)指令举例 MVN R0, #4 ; R0 = -5 MVN R0, #0 ; R0 = -1 这是逻辑非操作而不是算术操作,这个取反的值加

15、1才是它的取负的值。 (3)指令的使用 向寄存器中传送一个负数。 生成位掩码(Bit Mask)。 求一个数的反码。,3.2 ARM处理器的指令集,3.2.1 数据操作指令 3AND指令 AND指令将shifter_operand表示的数值与寄存器Rn的值按位(bitwise)做逻辑与操作,并将结果保存到目标寄存器Rd中,同时根据操作的结果更新CPSR寄存器。 (1)指令的语法格式:ANDS , (2)指令举例 保留R0中的0位和1位,丢弃其余的位。 AND R0, R0, #3 R2 = R1&R3。 AND R2,R1,R3 R0 = R0&0x01,取出最低位数据。 ANDS R0,R0,#0x01,3.2 ARM处理器的指令集,3.2.1 数据操作指令 4EOR指令 EOR(Exclusive OR)指令将寄存器Rn中的值和shifter_operand的值执行按位“异或”操作,并将执行结果存储到目的

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号