ARM微处理器的指令系统教学PPT.ppt
《ARM微处理器的指令系统教学PPT.ppt》由会员分享,可在线阅读,更多相关《ARM微处理器的指令系统教学PPT.ppt(90页珍藏版)》请在三一办公上搜索。
1、3.3 ARM微处理器的指令系统,3.3.1 指令集概述3.3.2 寻址方式3.3.3 指令集,3.3.1 指令集概述,指令长度指令集可以是以下任一种32 bits 长(ARM状态)16 bits 长(Thumb 状态)ARM7TDMI 支持3种数据类型字节(8-bit)半字(16-bit)字(32-bit)字必须被排成4个字节边界对齐,半字必须被排列成2个字节边界对齐,ARM指令集的特点,向后兼容:新版本增加指令,并保持指令向后兼容;Load-store 结构*load/store 从存储器中读某个值,操作完后再将其放回存储器中只对存放在寄存器的数据进行处理;对于存储器中的数据,只能使用lo
2、ad/store指令进行存取,指令格式,指令格式在ARM状态中使用,指令编码格式,Cond指令执行的条件编码Opcode指令操作符编码S决定指令的操作是否影响CPSR的值Rd操作目标寄存器编码Rn包含第一操作数的寄存器编码Shifter_operand表示第二操作数,条件码标志,任何数据处理指令都可以设置条件码(N,Z,V,and C)适用于除比较操作外的所有数据处理指令特殊的请求必须在汇编语言中实现,这种请求是通过把”S”增加到选择代码中指定的算术操作设置所有的标志位(N,Z,C,and V)逻辑和移位操作设置 N and Z,条件码标志,下表为所有可能的条件码:注意:AL为默认状态,不需要
3、单独指出,条件执行示例,一系列的指令都使用条件指令if(a=0)func(1);CMP r0,#0MOVEQ r0,#1;把func()函数的参数赋给r0 BLEQ func置标志位,再使用不同的条件码if(a=0)x=0;r0:a,r1:x if(a0)x=1;CMP r0,#0MOVEQ r1,#0MOVGT r1,#1使用条件比较指令if(a=4|a=10)x=0;CMP r0,#4CMPNE r0,#10MOVEQ r1,#0,桶形移位器,桶形移位器的使用:支持第二操作数的移位,逻辑移位:空位以零补充LSL:逻辑左移:字的最小位空位清零LSR:逻辑右移:字的最大位空位清零.,算术移位:
4、ASR:=LSRASL:算术左移,算术移位的对象是带符号数,在移位过程中必须保持操作数的符号不变。若源操作数为正数,则字的高端空出的位补0。若源操作数为负数,则字的高端空出的位补1。,循环移位:ROR:循环右移(Rotate Right)。从字的最低端移出的位填入字的高端空出的位。RRX:扩展为1的循环右移(Rotate Right Extended by 1 place)。操作数右移一位,空位(位31)用原C标志填充。,数据处理指令,立即数操作:移位寄存器操作数第二个操作数在与第一个操作数合成之前,是服从于移位操作的.,ARM指令分类,存储器访问指令 把存储器的值拷贝到寄存器中(load)o
5、r 把寄存器中的值拷贝到存储器中(store)数据处理指令 使用和改变寄存器的值控制流指令 分支分支和链接,保存返回的地址,以恢复最先的次序软件中断指令程序状态寄存器指令协处理器指令,3.3.2 寻址方式,寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式。ARM处理器具有9种基本寻址方式。寻址方式分类:1.寄存器寻址;2.立即数寻址;3.寄存器移位寻址;4.寄存器间接寻址;5.基址寻址;6.多寄存器寻址;7.堆栈寻址;8.块拷贝寻址;9.相对寻址。,操作数的值在寄存器中,指令中的地址码字段指出的是寄存器编号,指令执行时直接取出寄存器值来操作。寄存器寻址指令举例如下:MOV R
6、1,R2;将R2的值存入R1 SUB R0,R1,R2;将R1的值减去R2的值,结果保存到R0,MOV R1,R2,0 xAA,寻址方式分类寄存器寻址,立即寻址指令中的操作码字段后面的地址码部分即是操作数本身,也就是说,数据就包含在指令当中,取出指令也就取出了可以立即使用的操作数(这样的数称为立即数)。立即寻址指令举例如下:SUBSR0,R0,#1;R0减1,结果放入R0,并且影响标志位MOVR0,#0 xFF000;将立即数0 xFF000装入R0寄存器,寻址方式分类立即寻址,MOV R0,#0 xFF00,0 xFF00,从代码中获得数据,寄存器移位寻址是ARM指令集特有的寻址方式。当第2
7、个操作数是寄存器移位方式时,第2个寄存器操作数在与第1个操作数结合之前,选择进行移位操作。寄存器移位寻址指令举例如下:MOVR0,R2,LSL#3;R2的值左移3位,结果放入R0,;即是R0=R28 ANDSR1,R1,R2,LSL R3;R2的值左移R3位,然后和R1相;“与”操作,结果放入R1,寻址方式分类寄存器移位寻址,MOV R0,R2,LSL#3,0 x08,0 x08,逻辑左移3位,寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号,所需的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针。寄存器间接寻址指令举例如下:LDRR1,R2;将R2指向的存储单元的数
8、据读出;保存在R1中 SWPR1,R1,R2;将寄存器R1的值和R2指定的存储;单元的内容交换,寻址方式分类寄存器间接寻址,LDR R0,R2,0 xAA,基址寻址就是将基址寄存器的内容与指令中给出的偏移量(4K)相加/减,形成操作数的有效地址。基址寻址用于访问基址附近的存储单元,常用于查表、数组操作、功能部件寄存器访问等。寄存器间接寻址是偏移量为0的基址加偏移寻址。基址寻址指令举例如下(前索引寻址):LDRR2,R3,#0 x0C;读取R3+0 x0C地址上的存储单元;的内容,放入R2 STRR1,R0,#-4!;先R0=R0-4,然后把R0的值寄存;到保存到R1指定的存储单元,寻址方式分类
9、基址寻址,LDR R2,R3,#0 x0C,0 xAA,将R3+0 x0C作为地址装载数据,基址寻址指令举例如下:LDRR0,R1,#4;R0=R1,R1R14;后索引基址寻址;ARM这种自动索引机制不消耗额外的时间LDR R0,R1,R2;R0=R1+R2,寻址方式分类基址寻址,多寄存器寻址一次可传送几个寄存器值,允许一条指令传送16个寄存器的任何子集或所有寄存器。多寄存器寻址指令举例如下:LDMIA R1!,R2-R7,R12;将R1指向的单元中的数据读出到;R2R7、R12中(R1自动加4)STMIA R0!,R2-R7,R12;将寄存器R2R7、R12的值保;存到R0指向的存储;单元中
10、;(R0自动加4),寻址方式分类多寄存器寻址,LDR R1!,R2-R4,R6,0 x40000000,堆栈是一个按特定顺序进行存取的存储区,操作顺序为“后进先出”。堆栈寻址是隐含的,它使用一个专门的寄存器(堆栈指针)指向一块存储区域(堆栈),指针所指向的存储单元即是堆栈的栈顶。存储器堆栈可分为两种:向上生长:向高地址方向生长,称为递增堆栈向下生长:向低地址方向生长,称为递减堆栈,寻址方式分类堆栈寻址,寻址方式分类堆栈寻址,0 x12345678,0 x12345678,堆栈指针指向最后压入的堆栈的有效数据项,称为满堆栈;堆栈指针指向下一个待压入数据的空位置,称为空堆栈。,寻址方式分类堆栈寻址
11、,0 x12345678,所以可以组合出四种类型的堆栈方式:满递增:堆栈向上增长,堆栈指针指向内含有效数据项的最高地址。指令如LDMFA、STMFA等;空递增:堆栈向上增长,堆栈指针指向堆栈上的第一个空位置。指令如LDMEA、STMEA等;满递减:堆栈向下增长,堆栈指针指向内含有效数据项的最低地址。指令如LDMFD、STMFD等;空递减:堆栈向下增长,堆栈指针向堆栈下的第一个空位置。指令如LDMED、STMED等。,寻址方式分类堆栈寻址,多寄存器传送指令用于将一块数据从存储器的某一位置拷贝到另一位置。如:STMIA R0!,R1-R7;将R1R7的数据保存到存储器中。;存储指针R0在保存第一个
12、值之后增加,;增长方向为向上增长。STMIB R0!,R1-R7;将R1R7的数据保存到存储器中。;存储指针R0在保存第一个值之前增加,;增长方向为向上增长。,寻址方式分类块拷贝寻址,相对寻址是基址寻址的一种变通。由程序计数器PC提供基准地址,指令中的地址码字段作为偏移量,两者相加后得到的地址即为操作数的有效地址。相对寻址指令举例如下:BLSUBR1;调用到SUBR1子程序BEQLOOP;条件跳转到LOOP标号处.LOOP:MOVR6,#1.SUBR1:.,寻址方式分类相对寻址,3.3.3 指令集,指令分类(1)存储器访问指令 把存储器的值拷贝到寄存器中(load)or 把寄存器中的值拷贝到存
13、储器中(store)(2)数据处理指令 使用和改变寄存器的值(3)控制流指令 分支分支和链接,保存返回的地址,以恢复最先的次序(4)软件中断指令(5)程序状态寄存器指令(6)协处理器指令(7)伪指令,(1)存储器访问指令,1)单寄存器数据传送(LDR、STR)2)多寄存器数据传送(LDM、STM)3)寄存器和存储器交换指令SWP,单字(32bit),半字(6 bit)以及字节(8 bit)传送寻址寄存器偏移地址=基址 寄存器偏移立即数偏移地址=基址 立即数常数后变址Post-indexing:modify address after use前变址Pre-indexing:modify addr
14、ess before use回写如果可能,更新基址寄存器,1)单指令传送(LDR,STR),单寄存器传送指令,寻址方式,例子,PRE r0=0 x00000000,r1=0 x00009000,Mem320 x00009000=0 x01010101 Mem320 x00009004=0 x02020202回写型前变址寻址:LDR r0,r1,#0 x4!POST r0=0 x02020202,r1=0 x00009004前变址寻址:LDR r0,r1,#0 x4 POST r0=0 x02020202,r1=0 x00009000后变址寻址:LDR r0,r1,#0 x4POST r0=0
15、x01010101,r1=0 x00009004,数据传送指令-5,2)多寄存器数据传送指令 LDM,STM,load(LDM)或 store(STM)当前可访问寄存器的任意子集 使用堆栈:maintaining full or empty stacks which can grow up or down memory上下文切换:保存或重新存储工作寄存器块拷贝:在主存储器中移动大数据块寻址Pre/Post indexingAuto increment or decrement回写到基址寄存器Write back the base register,多寄存器数据传送指令的要点,多寄存器Load/
16、Store指令会增加中断的延迟,因为ARM不会打断正在执行的指令去响应中断,而必须等到指令执行完成;一般编译器将提供一个选项以控制Load/Store指令可以传送的最大寄存器数目,以限制最大中断延迟。,多寄存器传送指令的寻址模式,注:!决定Rn的值是否随着传送而改变,例子,要求:保存r1r3到内存地址0 x90000 x900c,并且更新基址寄存器r4PRE:r1=0 x00000001,r2=0 x00000002,r3=0 x00000003,r4=0 x9000执行操作:STMIA r4!,r1,r2,r3(执行后增加)POST:mem320 x9000=0 x00000001mem32
17、0 x9004=0 x00000002mem320 x9008=0 x00000003r4=0 x900c,多寄存器传送寻址模式,例:将存储器中的连续数据装载到寄存器,PRE:mem320 x80018=0 x03,mem320 x80014=0 x02,mem320 x80010=0 x01,r0=0 x00080010,r1=0 x00000000,r2=0 x00000000,r3=0 x00000000执行指令:LDMIA r0!,r1-r3POST:r0=0 x0008001c,r1=0 x00000001,r2=0 x00000002,r3=0 x00000003,例:完成一个存储
18、器数据块拷贝,注:r9存放源数据的起始地址 r10存放目标起始地址 r11存放源结束地址 loop:LDMIA r9!,r0-r7;装载32字节并更新r9指针 STMIA r10!,r0-r7;存储32字节并更新r10指针 CMP r9,r11;是否到达结束地址 BNE loop;不相等跳转,堆栈操作,ARM使用多寄存器Load/Store指令来完成堆栈操作;使用堆栈时,需要确定堆栈在存储空间中是向上生长(递增的“A”)还是向下生长(递减的“D”);满堆栈(“F”)是指堆栈指针指向堆栈的最后一个已使用的地址或满位置;相反,空堆栈(“E”)是指SP指向堆栈的第一个没有使用的地址或空位置;,堆栈操
19、作寻址方式,堆栈,ARM堆栈操作通过块传送指令来完成:STMFD(Push)块存储-Full Descending stack STMDBLDMFD(Pop)块装载-Full Descending stack LDMIA,STMFD sp!,r4-r7,lr,8034,例:把寄存器内容放入堆栈,更新sp,PRE:r1=0 x00000002,r4=0 x00000003,sp=0 x00080014执行指令:STMFD sp!,r1,r4POST:r1=0 x00000002,r4=0 x00000003,sp=0 x0008000c,在寄存器和存储器之间,由一次存储器读和一次存储器写组成的原
20、子操作。完成一个字节或字的交换。语法:SWPB Rd,Rm,Rn,3)单数据交换指令-SWAP,SWAP指令的用法,PRE mem320 x9000=0 x12345678,r0=0 x00000000,r1=0 x11112222,r2=0 x00009000执行操作:SWP r0,r1,r2POST:mem320 x9000=0 x11112222,r0=0 x12345678,r1=0 x11112222,r2=0 x00009000交换指令多用于实现操作系统中的信号量和互斥操作,该指令有修饰符B,即有字交换和字节交换两种形式;,(2)数据处理指令,1)数据传送指令-MOV,MOV指令是
21、把一个数N送到目标寄存器中,N可以是寄存器,也可以是立即数。MOV指令语法:指令cond S Rd,N,PRE:r0=8,r2=5MOV r0,r2,LSL#2(逻辑左移两位:r22=5*4)POST:r0=20,r2=5,例:PRE:r0=5,r2=6 MOV r0,r2 POST:r0=6,r2=6,2)数据处理指令,立即数操作:移位寄存器操作数第二个操作数在与第一个操作数合成之前,是服从于移位操作的.,任何数据处理指令都可以设置条件码(N,Z,V,and C)适用于除比较操作外的所有数据处理指令特殊的请求必须在汇编语言中实现,这种请求是通过把”S”增加到选择代码中指定的算术操作设置所有的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM 微处理器 指令系统 教学 PPT
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-2202713.html