嵌入式系统讲义.ppt

上传人:s****8 文档编号:67253426 上传时间:2022-12-24 格式:PPT 页数:207 大小:990.50KB
返回 下载 相关 举报
嵌入式系统讲义.ppt_第1页
第1页 / 共207页
嵌入式系统讲义.ppt_第2页
第2页 / 共207页
点击查看更多>>
资源描述

《嵌入式系统讲义.ppt》由会员分享,可在线阅读,更多相关《嵌入式系统讲义.ppt(207页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、嵌入式系统讲义嵌入式系统讲义第第3章章 ARM指令系统指令系统周国运周国运2007.3第第3章章 ARM指令系统指令系统主要内容主要内容3.1 ARM指令结构指令结构3.2 ARM寻址方式寻址方式3.3 ARM指令集指令集3.4 Thumb指令集指令集3.5 ARM伪指令伪指令3.6 ARM汇编语言程序设计汇编语言程序设计3.1 ARM指令系统概述指令系统概述主要内容主要内容一、指令系统概念一、指令系统概念 二、二、ARMARM指令的特点指令的特点三、三、ARMARM指令的格式指令的格式四、指令的条件码四、指令的条件码3.1 ARM指令系统概述指令系统概述一、指令系统概念一、指令系统概念 指令

2、:指令:是规定计算机进行某种操作的命令。是规定计算机进行某种操作的命令。指令系统:指令系统:计算机能够执行的各种指令的集合。计算机能够执行的各种指令的集合。二、二、ARMARM指令的特点指令的特点所有指令都是所有指令都是3232位的。位的。大多数指令都在单周期内完成。大多数指令都在单周期内完成。所有指令都可以条件执行。所有指令都可以条件执行。ARMARM指令为指令为load/storeload/store类型。类型。基本指令仅基本指令仅3636条,分成五类。条,分成五类。有有7 7种寻址方式。种寻址方式。指令集可以通过协处理器扩展。指令集可以通过协处理器扩展。ARMARM指令是加载指令是加载/

3、存储存储(Load/Store)(Load/Store)型:型:也即指令集仅能处理寄存器中的数据,而且处也即指令集仅能处理寄存器中的数据,而且处理结果都要放回寄存器中,而对系统存储器的访问理结果都要放回寄存器中,而对系统存储器的访问则需要通过专门的加载则需要通过专门的加载/存储指令来完成。存储指令来完成。ARMARM指令可以分为五大类:指令可以分为五大类:数据处理指令、存储器访问指令、分支指令、数据处理指令、存储器访问指令、分支指令、协处理器指令、杂项指令。协处理器指令、杂项指令。ARMARM指令有指令有7 7种寻址方式:种寻址方式:立即寻址、寄存器寻址、寄存器间接寻址、基立即寻址、寄存器寻址

4、、寄存器间接寻址、基址寻址、堆栈寻址址寻址、堆栈寻址、块拷贝寻址、相对寻址。、块拷贝寻址、相对寻址。三、三、ARMARM指令的格式指令的格式ARMARM指令基本的语法格式为:指令基本的语法格式为:ss ,OpcodeOpcode:指令操作码。指令操作码。condcond:指令的条件码。:指令的条件码。S S:决定指令的操作是否影响:决定指令的操作是否影响cpsrcpsr的值。的值。RdRd:目标寄存器编码。目标寄存器编码。RnRn:包含第一个操作数的寄存器编码。包含第一个操作数的寄存器编码。Operand2Operand2:第:第2 2操作数。操作数。ARMARM指令典型的编码格式为:指令典型

5、的编码格式为:(数据处理指令类)(数据处理指令类)CondOpcodeSRnRdOperand2011121516192021242527283178 例:例:ADDS R2,R1,#1SUBNES R2,R1,#0 x20LDR R0,R1四、指令的条件码四、指令的条件码 条条件件码码的的位位数数和和位位置置:每每条条ARMARM指指令令包包含含4 4位位条条件件码码域域,它它占占用用指指令令编编码码的的最最高高四四位位3131:2828。条条件件码码的的表表示示:条条件件编编码码共共 2 24 4 16 16 种种,其其中中,1515种种用用于于指指令令的的条条件件码码。每每种种条条件件码

6、码用用2 2个个英英文文缩缩写字符表示。(见写字符表示。(见P47 P47 表表2-62-6)带带条条件件指指令令的的执执行行:ARMARM处处理理器器根根据据指指令令的的执执行条件是否满足,决定当前指令是否执行。行条件是否满足,决定当前指令是否执行。只只有有在在cpsrcpsr中中的的条条件件标标志志位位满满足足指指定定的的条条件件时时,指指令令才才会会被被执执行行。不不符符合合条条件件的的代代码码依依然然占占用用一一个个时钟周期(相当于一个时钟周期(相当于一个NOPNOP指令)。指令)。条条件件码码的的书书写写方方法法:条条件件码码的的位位置置在在指指令令助助记记符的后面(因此也称为条件后

7、缀)。符的后面(因此也称为条件后缀)。例如:例如:MOVMOVEQEQ R0,R1 R0,R1指令条件码表指令条件码表条件码条件码助记符助记符含含 义义标标 志志0000EQ相等相等Z=10001NE不相等不相等Z=00010CS/HS无符号数大于或等于无符号数大于或等于C=10011CC/LO无符号数小于无符号数小于C=00100MI负数负数N=10101PI非负数非负数N=00110VS溢出溢出V=10111VC没有溢出没有溢出V=01000HI无符号数大于无符号数大于C=1且且Z=01001LS无符号数小于或等于无符号数小于或等于C=0或或Z=11010GE有符号数大于或等于有符号数大于

8、或等于N=V1011LT有符号数小于有符号数小于N!=V1100GT有符号数大于有符号数大于Z=0且且N=V1101LE有符号数小于或等于有符号数小于或等于Z=1或或N!=V1110AL无条件执行无条件执行任意任意1111保留保留v5以下版本总执行以下版本总执行,v5及以上版本有用及以上版本有用3.2 ARM寻址方式寻址方式主要内容主要内容一、一、立即寻址立即寻址二、寄存器寻址二、寄存器寻址三、寄存器间接寻址三、寄存器间接寻址四、基址寻址四、基址寻址五、堆栈寻址五、堆栈寻址 六、块拷贝寻址六、块拷贝寻址七、相对寻址七、相对寻址3.2 ARM寻址方式寻址方式寻址方式:处理器根据指令中给出的(地址

9、)寻址方式:处理器根据指令中给出的(地址)信息,寻找操作数(物理地址)的方式。信息,寻找操作数(物理地址)的方式。我们将我们将ARMARM指令系统的寻址方式分为指令系统的寻址方式分为7 7种(有种(有分为分为9 9种的等)。种的等)。3.2.1 立即寻址立即寻址立即寻址也叫立即数寻址。立即寻址也叫立即数寻址。立即寻址概念:立即寻址概念:操作数本身就在指令中给出,只操作数本身就在指令中给出,只要取出指令也就取到了操作数。这个操作数被称为立要取出指令也就取到了操作数。这个操作数被称为立即数,对应的寻址方式也就叫做立即寻址。即数,对应的寻址方式也就叫做立即寻址。ADD R0,R0,1;R0R01 M

10、OVMOV R0 R0,0 x3f0 x3f;R0R00 x3f0 x3f书写立即数时,要求以书写立即数时,要求以“”为前缀。为前缀。十六进制数,后加十六进制数,后加 0 x0 x或或&,&,如如#0 x3f,#&3f.#0 x3f,#&3f.二进制数,二进制数,后加后加 0b,0b,如如#0b1011#0b1011十进制数,十进制数,#后加后加 0d0d或缺省或缺省,如如#0d678,#789#0d678,#789 如何构造如何构造3232位立即数?位立即数?在指令格式中,第二个操作数有在指令格式中,第二个操作数有12位位:因此有效立即数因此有效立即数immediateimmediate可以

11、表示成:可以表示成:=immed_8=immed_8 循环右移(循环右移(2 2rotrot)4 bit 移位值移位值(0-15)乘于乘于2,得到一个范围在,得到一个范围在0-30,步长为步长为 2的移位值。的移位值。因此,将因此,将ARM中的立即数中的立即数称为称为8位位图位位图。记住一条准则:记住一条准则:“最后最后8位移动偶数位位移动偶数位”得到立得到立即数。即数。Immed_8rot12 11 8 7 0Shifter RORimmediate031ror#0 ror#8 ror#30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0

12、 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 07例:例:下列命令中,汇编器把立即数转换为移位操作下列命令中,汇编器把立即数转换为移位操作:MOV R0,#4096;uses 0 x40 ror 26 ADD R1,R2,#0 xFF0000;uses 0 xFF ror 16带有立即数的带有立即数的MOV 指令的二进制编码为:指令的二进制编码为:MOV R0,#0 xF200 ;E3A00CF2.MOV R1,#0 x110000 ;E3A01811.MOV R

13、4,#0 x12800 ;E3A04B4A.0 xF200=0 xF2循环右移(循环右移(2*C)0 x110000=0 x11循环右移(循环右移(2*8)0 x12800=0 x4A循环右移(循环右移(2*B)只有能够通过此构造方法得到的才是合法的立即数只有能够通过此构造方法得到的才是合法的立即数。合法立即数合法立即数:0 xFF;0 x104(其(其8位图为位图为0 x41););0 xFF0;0 xFF00非法立即数:非法立即数:0 x101;0 x102;0 xFF1深入理解:深入理解:一个合法的立即数可能有多种编码方法,将一个合法的立即数可能有多种编码方法,将使某些指令的执行产生不同

14、的结果。使某些指令的执行产生不同的结果。如如 0 x3F0ARM汇编编译器生成立即数的规则为:汇编编译器生成立即数的规则为:当立即数数值在当立即数数值在0到到0 xFF范围时,令范围时,令immed_8=,rot=0。其它情况下,汇编编译器选择使其它情况下,汇编编译器选择使rot数值最小的编码方式。数值最小的编码方式。immed_8=0 x3F,rot=0 xE,对,对3F左移左移4位位immed_8=0 xFC,rot=0 xF,对,对FC左移左移2位位3.2.2 寄存器寻址寄存器寻址寄存器寻址:寄存器寻址:利用寄存器中的数值作为操作数利用寄存器中的数值作为操作数。这种寻址方式是各类微处理器

15、经常采用的一种方这种寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率较高的寻址方式。式,也是一种执行效率较高的寻址方式。两种具体形式:两种具体形式:寄存器寻址、寄存器移位寻址。寄存器寻址、寄存器移位寻址。一、一、寄存器寻址寄存器寻址如指令:如指令:ADDR0,R1,R2;R0R1R2 二、寄存器移位寻址二、寄存器移位寻址 1、寄存器移位寻址、寄存器移位寻址当第二操作数为寄存器型时,在执行寄存器寻址操作时,当第二操作数为寄存器型时,在执行寄存器寻址操作时,也可以对第二操作数寄存器进行移位,此时也可以对第二操作数寄存器进行移位,此时第二操作数第二操作数形式形式为:为:MOV Rd,Rn,

16、Rm,其中:其中:Rm 称为第二操作数寄存器称为第二操作数寄存器 用来指定移位类型和移位位数,有两种形式:用来指定移位类型和移位位数,有两种形式:F 5位立即数位立即数(其值小于(其值小于32)F 寄存器寄存器(用用Rs表示表示)(其值小于(其值小于32)在在指指令令执执行行时时将将寄寄存存器器移移位位后后的的内内容容作作为为第第二二操操作作数数参参与运算。例如指令:与运算。例如指令:ADD R3,R2,R1,LSR#2;R3R2+(R1右移右移2位位)ADD R3,R2,R1,LSR R0;R3R2+(R1右移右移R0位位)2、第二操作数移位方式、第二操作数移位方式共有共有6种移位方式:种移

17、位方式:LSL 逻辑左移逻辑左移 LSR 逻辑右移逻辑右移 ASL 算术左移算术左移 ASR 算术右移算术右移 ROR 循环右移循环右移 RRX 带扩展的循环右移带扩展的循环右移(1)LSL:逻辑左移:逻辑左移,空出的最低有效位用,空出的最低有效位用0填充。填充。031 00(2)LSR:逻辑右移:逻辑右移,空出的最高有效位用,空出的最高有效位用0填充。填充。31 0SUB R3,R2,R1,LSL#2;R3R2-(R1左移左移2位位)SUB R3,R2,R1,LSR R0;R3R2-(R1右移右移R0位位)(3)ASL:算术左移算术左移,由于左移空出的有效,由于左移空出的有效位用位用0填充,

18、因此它与填充,因此它与LSL同义。同义。(4)ASR:算术右移算术右移(Arithmetic Shift Right)。算术移位的对象是带符号数,移位过程算术移位的对象是带符号数,移位过程中必须保持操作数的符号不变。如果源操作数是中必须保持操作数的符号不变。如果源操作数是正数,空出的最高有效位用正数,空出的最高有效位用0填充,如果是负填充,如果是负数用数用1填充。填充。30 0 ADD R3,R2,R1,ASL#2;R3R2+(R1左移左移2位位)SUB R3,R2,R1,ASR R3;R3R2-(R1算术右移算术右移R3位位)(5)ROR:循环右移循环右移(Rotate Right),移出的

19、字的最低移出的字的最低有效位依次填入空出的最高有效位。有效位依次填入空出的最高有效位。31 0 (6)RRX:带进位位的循环右移带进位位的循环右移(Rotate Right Extended)。将寄存器的内容将寄存器的内容循环右移循环右移1位位,空位用原来,空位用原来C标标志位填充。志位填充。31 0 CSUB R3,R2,R1,ROR#2;R3R2+(R1循环右移循环右移2位位)SUB R3,R2,R1,RRX R0;R3R2-(R1带进位位循环右移带进位位循环右移R0位位)3、第二操作数的移位位数、第二操作数的移位位数 移位位数可以用立即数方式或者寄存器方式给出移位位数可以用立即数方式或者

20、寄存器方式给出,其,其值均小于值均小于32,应为,应为0-31。如下所示:如下所示:ADD R3,R2,R1,LSR#2;R3R2+(R1右移右移2位位)ADD R3,R2,R1,LSR R4;R3R2+(R1右移右移R4位位)寄存器寄存器R1的内容分别逻辑右移的内容分别逻辑右移2位、位、R4位位,再与寄存再与寄存器器R2的内容相加,结果放入的内容相加,结果放入R3中。中。3.2.3 寄存器间接寻址寄存器间接寻址寄存器间接寻址寄存器间接寻址就是以就是以寄存器中的值作为操作数的地址寄存器中的值作为操作数的地址,而操,而操作数本身存放在存储单元中。例如以下指令:作数本身存放在存储单元中。例如以下指

21、令:LDRR0,R1;R0R1 STRR0,R1;R1R0第一条指令将以第一条指令将以R1的值为地址的存储单元中的内容的值为地址的存储单元中的内容加载到寄存器加载到寄存器R0中。中。第二条指令将第二条指令将R0的内容存储到以的内容存储到以R1的值为地址的存的值为地址的存储单元中。储单元中。R1基址寄存器基址寄存器 R1的内容的内容基地址基地址3.2.4 变址寻址变址寻址一、变址寻址一、变址寻址也叫基址加偏(变)址寻址也叫基址加偏(变)址寻址 将将基址寄存器基址寄存器的内容与指令中给出的的内容与指令中给出的地址偏移量地址偏移量相加相加,得到操作数所在的存储器的有效地址。,得到操作数所在的存储器的

22、有效地址。变址寻址方式常用于访问某基地址附近的地址单元。变址寻址方式常用于访问某基地址附近的地址单元。(4K)例如:例如:LDR R0,R1,4 ;R0mem32R14CondOpcodeRnRdOffset0111215161920272831二、偏移地址方式二、偏移地址方式有三种加偏址的方式有三种加偏址的方式1、前变址模式、前变址模式(不修改基址寄存器):(不修改基址寄存器):先基址先基址+偏址,生成操作数地址,做偏址,生成操作数地址,做指令指定的操作指令指定的操作。也叫也叫前索引偏移前索引偏移。0 x05R10 x200基址基址寄存器寄存器0 x200R00 x05源源 寄存器寄存器偏移

23、量偏移量120 x20C Pre-indexed:STR r0,r1,#122、自动变址模式、自动变址模式(修改基址寄存器修改基址寄存器):先基址先基址+偏移,生成操作数地址,偏移,生成操作数地址,做指令指定的操作。做指令指定的操作。然后自动修改基址寄存器。然后自动修改基址寄存器。例如:例如:LDR R0,R1,4!;R0mem32 R14;R1R14 !表示更新基址寄存器表示更新基址寄存器。3、后变址模式、后变址模式(修改基址寄存器修改基址寄存器):基址寄存器不加偏移作为操作数地址。基址寄存器不加偏移作为操作数地址。完成指令操作后,用完成指令操作后,用(基址基址+偏移偏移)的值修改基址的值修

24、改基址寄存器寄存器。即先用基地址传数,然后修改基地址(基址即先用基地址传数,然后修改基地址(基址+偏移),也叫偏移),也叫后索引偏移后索引偏移。0 x5r10 x200原基址原基址寄存器寄存器0 x200r00 x5源源 寄存器寄存器偏移量偏移量120 x20cr10 x20c更新基更新基址寄存器址寄存器例例 Post-indexed:STR r0,r1,#12三、偏移地址形式三、偏移地址形式 可可以以是是一一个个立立即即数数,也也可可以以是是另另一一个个寄寄存存器器,并并且且还还可可以以是是寄寄存存器器移移位位操操作作。如如下下所所示:示:LDR r0,r1,r2 ;r0mem32r1+r2

25、LDR r0,r1,r2,LSL#2;r0mem32r1+r2*4常用的是立即数偏移的形式。常用的是立即数偏移的形式。3.2.5 堆栈寻址堆栈寻址堆栈寻址堆栈寻址 堆栈寻址是隐含的,它使用一个专门的堆栈寻址是隐含的,它使用一个专门的寄存器(堆栈指针寄存器(堆栈指针SP)指向一块存储区域)指向一块存储区域(堆堆栈栈)。堆栈可分为两种增长方式:堆栈可分为两种增长方式:向上生长:向上生长:向高地址方向生长,称为向高地址方向生长,称为递增递增堆栈堆栈。向下生长:向下生长:向低地址方向生长,称为向低地址方向生长,称为递减递减堆栈堆栈。根据堆栈指针指向的数据位置的不同,可分为:根据堆栈指针指向的数据位置的

26、不同,可分为:满堆栈满堆栈 堆栈指针指向最后压入堆栈的有效数据项,堆栈指针指向最后压入堆栈的有效数据项,称为满堆栈;称为满堆栈;空堆栈空堆栈 堆栈指针指向下一个待压入数据的空位置,称为堆栈指针指向下一个待压入数据的空位置,称为空堆栈。空堆栈。这样就有这样就有4种类型的堆栈表示递增和递减的满和空种类型的堆栈表示递增和递减的满和空堆栈的各种组合。堆栈的各种组合。四种类型的堆栈工作方式四种类型的堆栈工作方式 满递增堆栈满递增堆栈FA(Full Ascending):):堆堆栈栈指指针针指指向向最最后后压压入入的的数数据据,且且由由低低地地址址向向高地址生长。高地址生长。满递减堆栈满递减堆栈FD:堆堆

27、栈栈指指针针指指向向最最后后压压入入的的数数据据,且且由由高高地地址址向向低地址生长。低地址生长。空递增堆栈空递增堆栈EA:堆堆栈栈指指针针指指向向下下一一个个将将要要放放入入数数据据的的空空位位置置,且由低地址向高地址生长。且由低地址向高地址生长。空递减堆栈空递减堆栈ED(Empty Descending):):堆堆栈栈指指针针指指向向下下一一个个将将要要放放入入数数据据的的空空位位置置,且由高地址向低地址生长。且由高地址向低地址生长。r4100r5FFr6 1234r7 A0BElr8034ABCD8765102E16FFFF1010123484209753高地址高地址LDMFA sp!,

28、r4-r7,pc满递增满递增SP100FF1234AOBE80341010123484209753r41r5 14544r60r712pc9020r4100100FFr5FF1234r61234A0BEr7 A0BE8034pc8034Old SP100FF1234A0BE8034SPOld SP100FF1234A0BE8034STMFD sp!,r4-r7,lr满递减满递减8034第第5次到此次到此3.2.6 块拷贝寻址块拷贝寻址一、块拷贝寻址一、块拷贝寻址把把存存储储器器中中的的一一个个数数据据块块加加载载到到多多个个寄寄存存器器中中,或或者者是是把把多多个个寄寄存存器器中中的的内内容容

29、保保存到存储器中存到存储器中。应应用用指指令令:块块拷拷贝贝寻寻址址是是多多寄寄存存器器传传送送指指令令LDM/STM的的寻寻址址方方式式,因因此此也也叫叫多多寄寄存存器寻址器寻址。块块拷拷贝贝寻寻址址操操作作中中的的寄寄存存器器,可可以以是是R0-R15这这16个个寄寄存存器器的的子子集集(一一部部分分),或或是是所所有寄存器。有寄存器。二、二、4种寻址操作种寻址操作LDMIA/STMIAIncrement After(先传送,后地址加先传送,后地址加4)LDMIB/STMIBIncrement Before(先地址加先地址加4,后传送后传送)LDMDA/STMDADecrement Aft

30、er(先传送,后地址减先传送,后地址减4)LDMDB/STMDBDecrement Before(先地址减先地址减4,后传送后传送)IAr1地址地址增加增加r4r0r1r4r0r1r4r0r1r4r0r10IBDADBSTMxx r10,r0,r1,r4基址寄存器基址寄存器(Rn)地址递减,指针地址递减,指针最后位置最后位置地址递增,指针地址递增,指针最后位置最后位置 栈生长栈生长 地址地址 顶空满顶空满 增减次序增减次序栈栈、块递增块递增栈栈、块递减块递减顶满顶满顶空顶空顶满顶满顶空顶空地址地址增加增加先增先增STMIBSTMFALDMIBLDMED后增后增STMIASTMEALDMIALD

31、MFD地址地址减少减少先减先减LDMDBLDMEASTMDBSTMFD后减后减LDMDALDMFASTMDASTMED多寄存器多寄存器load和和stroe指令的堆栈和块拷贝对照指令的堆栈和块拷贝对照STMFA(Full、Add):):栈满递增。栈满递增。F-栈顶满空;栈顶满空;A-栈增减栈增减LDMIB*(Inc、Befo):):块先增地址、再传数。块先增地址、再传数。3.2.7 相对寻址相对寻址相对寻址相对寻址 与与基基址址变变址址寻寻址址方方式式相相类类似似,相相对对寻寻址址以以程程序序计计数数器器PC的的当当前前值值为为基基地地址址,指指令令中中的的地地址址标标号号作作为为偏偏移移量量

32、,将将两两者者相相加加之之后后得得到到操操作作数数的的有有效效地址地址。相对寻址指令举例如下:相对寻址指令举例如下:BL SUBRl ;调用到;调用到SUBRl子程序子程序 .;SUBRl应为应为24位有符号数位有符号数SUBR1MOV PC,LR ;返回;返回3.3 ARM指令集指令集主要内容主要内容1、存储器访问指令、存储器访问指令2、数据处理指令、数据处理指令3、分支指令、分支指令4、协处理器指令、协处理器指令5、杂项指令、杂项指令6、ARM伪指令伪指令3.3.1 存储器访问指令存储器访问指令ARM微处理器用加载微处理器用加载/存储指令访问存储器,实存储指令访问存储器,实现在寄存器和存储

33、器之间传送数据。现在寄存器和存储器之间传送数据。加载指令加载指令用于用于将存储器中的数据传送到寄存器,将存储器中的数据传送到寄存器,存储指令存储指令则完成则完成相反的操作。相反的操作。由于由于ARM处理器对外设寄存器、处理器对外设寄存器、I/O映射空间与映射空间与存储器统一编址,因此,对外围设备的存储器统一编址,因此,对外围设备的I/O操作也用操作也用此类指令。此类指令。基本的加载基本的加载/存储指令仅有存储指令仅有5条,分为条,分为3种:种:LDR和和STR,单寄存器加载,单寄存器加载/存储指令存储指令 LDM和和STM,多寄存器加载,多寄存器加载/存储指令存储指令 SWP,寄存器和存储器数

34、据交换指令,寄存器和存储器数据交换指令一、单寄存器的存取指令一、单寄存器的存取指令 单单寄寄存存器器加加载载/存存储储指指令令是是ARM在在寄寄存存器和存储器间传送单个字节和字的最灵活方式。器和存储器间传送单个字节和字的最灵活方式。根根据据传传送送数数据据的的类类型型不不同同,单单个个寄寄存存器器存取指令又可以分为以下两类:存取指令又可以分为以下两类:单字和无符号字节的加载单字和无符号字节的加载/存储指令存储指令半字和有符号字节的加载半字和有符号字节的加载/存储指令存储指令1、单字和无符号字节的加载存储指令、单字和无符号字节的加载存储指令LDR:指令从内存中取指令从内存中取32位字或位字或8位

35、无符号字节数据位无符号字节数据放入寄存器;放入寄存器;STR:指令将寄存器中的指令将寄存器中的32位字或位字或8位无符号字节数位无符号字节数据保存到存储器中。据保存到存储器中。注意:注意:无符号字节加载时,用无符号字节加载时,用0将将8位的操作数扩展到位的操作数扩展到32位。位。(1)指令格式)指令格式 LDRcondT Rd,;加载指定地址上的字数据,放入;加载指定地址上的字数据,放入Rd中。中。STRcondT Rd,;存储;存储Rd中字数据,到指定地址的存储单元。中字数据,到指定地址的存储单元。LDRcondBT Rd,;加载字节数据到;加载字节数据到Rd中中,Rd最低字节有效,最低字节

36、有效,高高24位为位为0。STRcondBT Rd,;存储;存储Rd中字节数据,中字节数据,Rd中最低字节为传送数中最低字节为传送数据。据。T后缀后缀T为可选后缀,若指令有为可选后缀,若指令有T,那么即使处理器是在,那么即使处理器是在特权模式下,存储系统也将访问看成是处理器是特权模式下,存储系统也将访问看成是处理器是在用户模式下。在用户模式下。用于存储器保护。用于存储器保护。不能与前变址模式、自动变址模式一起使用(即不能与前变址模式、自动变址模式一起使用(即不能改变基址寄存器值)。不能改变基址寄存器值)。T在用户模式下无效。在用户模式下无效。(2)操作数寻址方式)操作数寻址方式 LDR/STR

37、指令为变址寻址指令为变址寻址,由两部分组成:,由两部分组成:基地址部分:基地址部分:为一个基址寄存器,可以为任一个通用为一个基址寄存器,可以为任一个通用寄存器;寄存器;偏移地址部分:偏移地址部分:这一部分非常灵活,实际就是第二个这一部分非常灵活,实际就是第二个操作数,可以有以下操作数,可以有以下3种格式:种格式:立即数立即数寄存器寄存器寄存器及移位常数。寄存器及移位常数。立即数立即数12位立即数可以是一个无符号的数值。这位立即数可以是一个无符号的数值。这个数据可以加到基址寄存器,也可以从基址寄存个数据可以加到基址寄存器,也可以从基址寄存器中减去这个数值。器中减去这个数值。指令举例如下:指令举例

38、如下:LDR R1,R0,#0 x12 ;将;将R0+0 x12地址处的数据读出,保存到地址处的数据读出,保存到R1中中(R0的值不变的值不变)LDR R1,R0,#-0 x12 ;将将R0-0 x12地址处的数据读出,保存到地址处的数据读出,保存到R1中中(R0的值不变的值不变)寄存器寄存器寄存器中的数值可以加到基址寄存器,寄存器中的数值可以加到基址寄存器,也可以从基址寄存器中减去这个数值。也可以从基址寄存器中减去这个数值。指令举例如下:指令举例如下:LDR R1,R0,R2 ;将;将R0+R2地址处的数据读出,保存到地址处的数据读出,保存到R1中中LDR R1,R0,-R2;将;将R0-R

39、2地址处的数据读出,保存到地址处的数据读出,保存到R1中中 寄存器及移位常数寄存器及移位常数寄存器移位后的值可以加到基址寄存器,寄存器移位后的值可以加到基址寄存器,也可以从基址寄存器中减去这个数值。也可以从基址寄存器中减去这个数值。指令举例如下:指令举例如下:LDR R1,R0,R2,LSL#2 ;将将R0+R24地址处的数据读出,保存到地址处的数据读出,保存到R1中中(R0、R2的值不变的值不变)LDR R1,R0,-R2,LSL#2 ;将将R0-R24地址处的数据读出,保存到地址处的数据读出,保存到R1中中(R0、R2的值不变的值不变)注意:注意:移位位数只能是移位位数只能是5位的立即数,

40、不能位的立即数,不能使用寄存器指定移位位数。使用寄存器指定移位位数。PC(即(即R15)使用的几个问题)使用的几个问题使用使用PC作为基址时,使用的数值是指令的地址作为基址时,使用的数值是指令的地址加加8个字节(取指与执行相差个字节(取指与执行相差8个字节)。个字节)。PC不能用做偏移寄存器,也不能用于任何变址不能用做偏移寄存器,也不能用于任何变址寻址模式。寻址模式。把一个字加载到把一个字加载到PC,将使程序转移到所加载的,将使程序转移到所加载的地址,这是一个公认的实现跳转的方法。但是应当地址,这是一个公认的实现跳转的方法。但是应当避免将一个字节加载到避免将一个字节加载到PC。把把PC存到存储

41、器的操作在不同体系结构的处理存到存储器的操作在不同体系结构的处理器中产生不同的结果,应尽可能避免。器中产生不同的结果,应尽可能避免。2、半字和有符号字节的加载存储指令、半字和有符号字节的加载存储指令这类这类LDR/STR指令可实现半字(有符号和无符指令可实现半字(有符号和无符号)、有符号字节数据的传送。号)、有符号字节数据的传送。特点:特点:偏移量格式、寻址方式与加载存储字和无符号字节指偏移量格式、寻址方式与加载存储字和无符号字节指令基本相同。令基本相同。立即数偏移量限定在立即数偏移量限定在8位,寄存器偏移量不可经过移位得位,寄存器偏移量不可经过移位得到。到。(1)指令格式如下)指令格式如下

42、LDR condH Rd,;加载无符号半字数据到;加载无符号半字数据到Rd的低的低16位位,高高16位清零。位清零。LDR condSB Rd,;加载指定地址上有符号字节到;加载指定地址上有符号字节到Rd中,高中,高24位用符号位扩展位用符号位扩展LDR condSH Rd,;加载指定地址上的有符号半字到;加载指定地址上的有符号半字到Rd中,高中,高16位用符号位扩展。位用符号位扩展。STRcondH Rd,;存储;存储Rd中的低中的低16位半字数据。位半字数据。存储有符号数据和无符号数据之间没有差别。存储有符号数据和无符号数据之间没有差别。(2)两点说明:)两点说明:符符 号号 位位有符号字

43、节或有符号半字的加载,有符号字节或有符号半字的加载,用用“符号位符号位”扩展到扩展到32位;无符号半字传送是用位;无符号半字传送是用0扩展到扩展到32位。位。地址对齐地址对齐对半字传送的地址必须为偶数。非对半字传送的地址必须为偶数。非半字对齐的半字加载将使半字对齐的半字加载将使Rd内容不可靠;非半字内容不可靠;非半字对齐的半字存储将使指定地址的对齐的半字存储将使指定地址的2字节存储内容字节存储内容不可靠。不可靠。(3)指令举例)指令举例LDRSB R1,R0,R3 ;将;将R0+R3地址上的字节数据读到地址上的字节数据读到R1,高高24位用符号位扩展。位用符号位扩展。LDRSH R1,R9 ;

44、将;将R9地址上的半字数据读出到地址上的半字数据读出到R1,高,高16位用符号位扩展。位用符号位扩展。LDRH R6,R2,#2 ;将;将R2地址上的半字数据读出到地址上的半字数据读出到R6,高,高16位用零扩展,然后修改位用零扩展,然后修改R2=R2+2。STRH R1,R0,#2!;将;将R1的数据保存到的数据保存到R0+2地址中,只存地址中,只存储低储低2字节数据,并且修改字节数据,并且修改R0=R0+2。二、二、多寄存器的存取指令多寄存器的存取指令 LDM和和STM指指令令可可以以实实现现在在一一组组寄寄存存器器和和一块连续的内存单元之间存一块连续的内存单元之间存/取数据。取数据。LD

45、M为为加加载载多多个个寄寄存存器器;STM为为存存储储多多个寄存器。个寄存器。这这两两条条指指令令,允允许许传传送送16个个寄寄存存器器R0-R15的任何子集或所有寄存器。的任何子集或所有寄存器。1、指令格式、指令格式LDMcond Rn!,STMcond Rn!,2、指令格式说明、指令格式说明(1)Rn:表表示示基基址址寄寄存存器器,装装有有传传送送数数据据的的初初始始地址,地址,Rn不允许为不允许为R15(即(即PC)。(2)Rn后缀后缀“!”:表示最后的地址写回到:表示最后的地址写回到Rn中。中。(3)Reglist:表表示示寄寄存存器器列列表表,可可包包含含多多个个序序号号连续的或者分

46、离的寄存器,用连续的或者分离的寄存器,用“,”分开。分开。格式例子:格式例子:R1,R2,R6R9列表寄存器和存储器地址的关系规则:列表寄存器和存储器地址的关系规则:编编号号低低的的寄寄存存器器对对应应于于存存储储器器中中低低地地址址单单元元,编编号高的寄存器对应于存储器中高地址单元。号高的寄存器对应于存储器中高地址单元。(4)后缀)后缀“”说明说明寄寄存存器器列列表表不不包包含含PC:使使用用后后缀缀“”进进行行数数据据传传送送且且时时,加加载载存存储储的的是是用用户户模模式式的的寄存器,而不是当前模式的寄存器。寄存器,而不是当前模式的寄存器。寄寄存存器器列列表表包包含含有有PC:除除了了正

47、正常常的的多多寄寄存存器传送外,还要将器传送外,还要将SPSR拷贝到拷贝到CPSR中。中。该用法可用于异常处理返回。该用法可用于异常处理返回。禁禁用用情情况况:后后缀缀“”不不允允许许在在用用户户模模式式或系统模式下使用。或系统模式下使用。,因为它们没有,因为它们没有SPSR(5)当)当Rn在寄存器列表中且使用后缀在寄存器列表中且使用后缀“!”对于对于STM指令,若指令,若Rn为寄存器列表中的最低数为寄存器列表中的最低数字的寄存器,则会将字的寄存器,则会将Rn的初值保存;的初值保存;其它情况下其它情况下Rn的加载值和存储值不可预知。的加载值和存储值不可预知。(6)地址字对齐)地址字对齐这些指令

48、寻址是字对齐的,即忽略地这些指令寻址是字对齐的,即忽略地址位址位1:0。(7)关于模式项)关于模式项LDM/STM的的主主要要用用途途是是现现场场保保护护、数数据据复复制制和和参参数数传传送送等等。其其模模式式有有如如下下8种种(前前面面4种种用用于于数数据据块的传输(块的传输(为存储操作为存储操作),后面后面4种是堆栈操作)种是堆栈操作):IA:先传、后地址加先传、后地址加4;IB:先地址加先地址加4、后传;、后传;DA:先传、后地址减:先传、后地址减4;DB:先地址减:先地址减4、后传;、后传;FD:满递减堆栈,先地址减满递减堆栈,先地址减4、后传,与、后传,与DB对应;对应;ED:空递减

49、堆栈,先传、后地址减空递减堆栈,先传、后地址减4,与,与DA对应;对应;FA:满递增堆栈,先地址加满递增堆栈,先地址加4、后传,与、后传,与IB对应;对应;EA:空递增堆栈,先传、后地址加空递增堆栈,先传、后地址加4,与,与IA对应。对应。(7)关于模式项)关于模式项LDM/STM的的主主要要用用途途是是现现场场保保护护、数数据据复复制制和和参参数数传传送送等等。其其模模式式有有如如下下8种种(前前面面4种种用用于于数数据据块的传输(块的传输(为加载寄存器为加载寄存器),后面,后面4种是堆栈操作)种是堆栈操作):IA:先传、后地址加先传、后地址加4;IB:先地址加先地址加4、后传;、后传;DA

50、:先传、后地址减:先传、后地址减4;DB:先地址减:先地址减4、后传;、后传;FD:满递减堆栈,先减地址、后传,与满递减堆栈,先减地址、后传,与IA对应;对应;ED:空递减堆栈,先传、后减地址,与空递减堆栈,先传、后减地址,与IB对应;对应;FA:满递增堆栈,先加地址、后传,与满递增堆栈,先加地址、后传,与DA对应;对应;EA:空递增堆栈,先传、后加地址,与空递增堆栈,先传、后加地址,与DB对应。对应。3、应用举例、应用举例LDMIA R0!,R3-R9 ;加载;加载R0指向地址上的多字数据,保存到指向地址上的多字数据,保存到R3R9中,中,R0值更新。值更新。STMIA R1!,R3-R9

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com