ARM指令分类及其寻址方式

上传人:宝路 文档编号:47583306 上传时间:2018-07-03 格式:PPT 页数:28 大小:215.89KB
返回 下载 相关 举报
ARM指令分类及其寻址方式_第1页
第1页 / 共28页
ARM指令分类及其寻址方式_第2页
第2页 / 共28页
ARM指令分类及其寻址方式_第3页
第3页 / 共28页
ARM指令分类及其寻址方式_第4页
第4页 / 共28页
ARM指令分类及其寻址方式_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《ARM指令分类及其寻址方式》由会员分享,可在线阅读,更多相关《ARM指令分类及其寻址方式(28页珍藏版)》请在金锄头文库上搜索。

1、ARM指令 分类及其寻址方式广嵌教育1第三章 ARM指令分类及其寻址方式o3.1 ARM指令集概要o3.2 ARM寻址方式o3.3 ARM指令集o3.4 Thumb指令介绍23.1 ARM指令集概要ARM指令长度及数据类型 oARM微处理器的指令长度可以是32位(在ARM状 态下),也可以为16位(在Thumb状态下)。 oARM微处理器中支持字节(8位)、半字 (16位 )、字(32位)三种数据类型。其中,字需要4字 节对齐(地址的低两位为 0)、半字需要2字节 对齐(地址的最低位为0)。o程序的启动都是从ARM指令集开始。所有的ARM 指令集都可以是有条件执行的。 3ARM汇编指令格式AR

2、M指令的典型编码格式 :ncond:指令执行的条件编码,如EQ、NE等。n:指令操作符编码,如LDR、STR等。 nS:决定指令的执行是否影响CPRS 的值。 n:包含第一个源操作数的寄存器编码。n:目标寄存器编码。n:第二个源操作数。ARM 指令语法格式中,中的内容是必需的,而中的内容 是可选的。4ARM指令的条件码域大多ARM指令都可以条件执行,也就是根据 CPSR中条件码的状态决定是否执行该指令。只有在 CPSR 中的条件码标志满足指定的条件时,带条件码 的指令才可以执行,否则指令被忽略(相当于一条空 操作NOP指令)。每一条ARM指令编码中包含4位的 条件码,位于指令编码的最高4位31

3、:28。条件码 共有16种,每种条件码可用两个字符(条件码的助记 符)表示,这两个字符可以添加在指令助记符的后面 和指令同时使用。在16种条件标志码中,只有15种 可以使用,第16种(1111)为系统保留,暂时不能 使用。 5ARM指令的条件码域 ARM指令的条件域63.2 ARM寻址方式o立即寻址 例:ADD R0 , R0 , 0x1 ; R0 R01 ADD R0 , R0 , 0x3f ;R0 R00x3f在以上两条指令中,第二个源操作数即为立即数,要求以“”为 前缀,对于以十六进制表示的立即数,还要求在“”后加上“0x” 。o寄存器寻址 寄存器寻址就是利用寄存器中的数值作为操作数 。

4、例:ADD R0 , R1 , R2 ; R0 R1R2 o寄存器间接寻址 寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操作数 本 身存放在存储器中 。例: LDR R0,R1 ; R0 R1 STR R0,R1 ;R1 R0 7寄存器寻址中第二操作数移位方式 oLSR:逻辑右移,空出的最高有效位用0填充。oLSL:逻辑左移,空出的最低有效位用0填充。oASL:算术左移,由于左移空出的有效位用0填充.oASR:算术右移,算术移位的对象是带符号数,移位过程中必须 保持操作数的符号不变。如果源操作数是正数,空出的最高有效 位用0填充,如果是负数用1填充。 oROR:循环右移,移出的字的最低

5、有效位依次填入空出的最高有 效位。oRRX:带扩展的循环右移。将寄存器的内容循环右移1位,空位 用原来C标志位填充。o寄存器移位寻址 ADD R3,R2,R1,LSL #2; R3R2+4*R1 ADD R3,R2,R1,LSL R4; R3R2+R1*2*R483.2 ARM寻址方式o基址变址寻址 基址变址寻址就是将寄存器(该寄存器一般称作基址寄存器)的内容与指令中 给出的地址偏移量相加,从而得到一个操作数的有效地址。变址寻址方式常用于 访问某基地址附近的地址单元。例: LDR R0 , R1 , 4 ; R0 R14 前变址模式 LDR R0 , R1 , 4 ! ; R0 R14、自动变

6、址模式 ; R1R14LDR R0 , R1 , 4 ; R0 R1、R1R14 后变址模式 LDR R0 , R1 , R2 ; R0 R1R2 基地加索引寻址 o多寄存器寻址 采用多寄存器寻址方式,一条指令可以完成多个寄存器值的传送。这种寻址方 式可以用一条指令完成传送最多 16 个通用寄存器的值。例: LDMIA R0 , R1 , R2 , R3 , R4 ; R1 R0、R2 R04、R3 R08、R4R012 93.2 ARM寻址方式o相对寻址 相对寻址可以认为是基地址为程序计数器PC的当前值,偏移量 为 目的地址和现行指令地址之间差的基址变址寻址,将PC的值与偏移量 相加之后得到

7、操作数的有效地址。以下程序段完成子程序的调用和返 回,跳转指令BL采用了相对寻址方式。例:BL NEXT ;跳转到子程序 NEXT 处执行 NEXT MOV PC,LR ;从子程序返回103.2 ARM寻址方式F堆栈是一种数据结构,按先进后出(First In Last Out,FILO )的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的 操作位置,堆栈指针总是指向栈顶。指向堆栈的地址寄存器称为 堆栈指针(SP)。F当堆栈指针指向最后压入堆栈的数据或指向第一个要读出的数据 时,称为满堆栈(Full Stack),而当堆栈指针指向最后压入堆 栈的数据的上一个或下一个空位置时,称为空堆栈(E

8、mpty Stack)。F访问存储器时,存储器的地址向高地址方向生长,称为递增堆栈 (ascending stack)。 存储器的地址向低地址方向生长,称 为递减堆栈(descending stack)。113.2 ARM寻址方式o堆栈寻址 ARM 微处理器支持这四种类型的堆栈工作方式 n满递增堆栈:堆栈指针指向最后压入的数据,且由低地址向高地 址生成。 n满递减堆栈:堆栈指针指向最后压入的数据,且由高地址向低地 址生成。 n空递增堆栈:堆栈指针指向下一个将要放入数据的空位置,且由 低地址向高地址生成。 n空递减堆栈:堆栈指针指向下一个将要放入数据的空位置,且由 高地址向低地址生成。 例:ST

9、MFD R13!,R0,R4-R12,LR ;将寄存器列表中的寄存器(R0,R4到 ;R12,LR)内容存入堆栈。LDMFD R13!,R0,R4-R12,PC ;将堆栈内容恢复到寄存器(R0,R4到 ;R12,PC)中。123.3 ARM指令集ARM指令集的种类n跳转指令n数据处理指令 n乘法指令与乘加指令 n程序状态寄存器访问指令 n加载/存储指令 n批量数据加载/存储指令n数据交换指令 n移位指令 n协处理器指令 n异常产生指令 133.3 ARM指令集跳转指令跳转指令用于实现程序流程的跳转,在 ARM 程序中有两种方法可以实现 程 序流程的跳转: n使用专门的跳转指令。 n直接向程序计

10、数器 PC 写入跳转地址值。 四种跳转指令nB 跳转指令(前后32MB 的地址空间)。指令编码中的跳转地址值 是相对当前PC值的一个偏移量,经汇编器计算得到跳转的绝对地址。 nBL 带返回的跳转指令。BL指令在执行跳转的同时将转移指令的下一条 指令的地址复制到当前处理器模式下的链接寄存器LR中,这一般用于 子程序的调用和返回。 nBLX 带返回和状态切换的跳转指令nBX 带状态切换的跳转指令 例: 1.CMP R1 , 0 BEQ Label 2.BX R7 ;跳转到R7的值指定的地址,并根据R7的最低位切换处理器状态143.3 ARM指令集数据处理指令 数据处理指令分类n数据传送指令n比较指

11、令 n算术逻辑运算指令 数据传送指令nMOV 数据传送指令 nMVN 数据取反传送指令 例: MOV R1 , R0 ;将寄存器 R0 的值传送到寄存器 R1 MOV R1 , R0 , LSL 3 ;将寄存器 R0 的值左移 3 位后传送 ;到R1 。 MVN R0 , 0 ;将立即数 0 取反传送到寄存器 R0 中,完成后 ;R0=1。 MOVS R2,#0x10 ;R2= #0x10,并影响标志位。 MVNS R2,#0xFF ;R20Xffff00,并影响标志位。153.3 ARM指令集数据处理指令 比较指令nCMP 比较指令 nCMN 反值比较指令 nTST 位测试指令 nTEQ 相

12、等测试指令 例: CMP R1 , 100 ;将寄存器 R1 的值与立即数 100 相减,并根;据结果设置 CPSR 的标志位。 CMN R1 , R0 ;将寄存器 R1 的值与寄存器 R0 的值相加,并根 ;据结果设置 CPSR 的标志位。 TST R1 , 0xffe ;将寄存器 R1 的值与立即数 0xffe 按位与,;并根据结果设置 CPSR 的标志位。 TEQ R1 , R2 ;将寄存器 R1 的值与寄存器 R2 的值按位异或, 并;根据结果设置 CPSR 的标志位,比较R1与R2是 否 ;相等 163.3 ARM指令集数据处理指令 算术运算指令 nADD 加法指令 nADC 带进位

13、加法指令,加上CPSR中的C条件标志位的值 nSUB 减法指令 nSBC 带借位减法指令 nRSB 逆向减法指令 nRSC 带借位的逆向减法指令 例:oADD R0 , R1 , #256 ; R0 = R1 + 256 oSUB R0 , R1 , R2 ; R0 = R1 - R2 oRSB R0 , R2 , R3 , LSL#1 ; R0 = (R3 1) - R2 oSUBS R0,R0,R2SBC R1,R1,R3 ;用SBC实现64位减法,(R1,R0)=(R1,R0)-;(R3,R2)173.3 ARM指令集数据处理指令 逻辑运算指令nAND 按位与指令 nORR 按位或指令

14、nEOR 按位异或指令 nBIC 位清除指令 例:oAND R0 ,R0 ,3 ;该指令保持 R0 的 0 、1 位,其余位清 零oORR R0 ,R0 ,3 ;该指令设置 R0 的 0 、1 位,其余位保持 ;不变。 oEOR R0 ,R0 ,3 ;该指令反转 R0 的 0 、1 位,其余位保持;不变 oBIC R0,R0,#0x1F;该指令清除 R0 中低5位,其余的位保持;不变。183.3 ARM指令集乘法指令与乘加指令 乘法指令与乘加指令共有以下 6 条: nMUL 32 位乘法指令 nMLA 32 位乘加指令 nSMULL 64 位有符号数乘法指令 nSMLAL 64 位有符号数乘加

15、指令 nUMULL 64 位无符号数乘法指令 nUMLAL 64 位无符号数乘加指令 例:oMUL R0 , R1 , R2 ; R0 = R1 R2 oMULS R0 , R1 , R2 ; R0 = R1 R2 ,同时设置 CPSR 中;的相关条件标志位oMLA R0 , R1 , R2 , R3 ; R0 = R1 R2 + R3 oSMULL R0,R1,R2,R3;R0=( R2 R3 )的低 32位R1 = ;( R2 R3 )的高32 位。193.3 ARM指令集程序状态寄存器访问指令 程序状态寄存器访问指令包括以下2条:nMRS 程序状态寄存器到通用寄存器的数据传送指令 nMSR 通用寄存器到程序状态寄存器的数据传送指令 例:oMRS R0 , CPSR ;传送 CPSR 的内容到 R0 oMRS R0 , SPSR ;传送 SPSR 的内容到 R0 oMSR CPSR , R0 ;传送 R0 的内容到 CPSR oMSR SPSR , R0 ;传送 R0 的内容到 SPSR oMSR CPSR_c , R0 ;传送 R0 的内容到 SPSR ,但仅仅;修改 CPSR 中的控制位域 PSR的控制域: 位31:24为条件标志位域,用f 表示;

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

最新文档


当前位置:首页 > 中学教育 > 教学课件

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