




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1嵌入式系统及其开发应用嵌入式系统及其开发应用第三章第三章 arm9指令系统指令系统2本章提要本章提要arm处理器的寻址方式处理器的寻址方式arm指令集指令集thumb指令集指令集33.1 arm3.1 arm处理器的寻址方式处理器的寻址方式l寻址方式寻址方式是处理器根据指令中给出的地址信息来寻找是处理器根据指令中给出的地址信息来寻找物理地址的方式。物理地址的方式。l目前目前arm指令系统支持指令系统支持8种种寻址方式。寻址方式。 寄存器寻址寄存器寻址 立即寻址立即寻址 寄存器间接寻址寄存器间接寻址 变址寻址变址寻址 寄存器移位寻址寄存器移位寻址 多寄存器寻址多寄存器寻址 堆栈寻址堆栈寻址 相
2、对寻址相对寻址43.1.1 3.1.1 寄存器寻址寄存器寻址 寄存器寻址寄存器寻址就是利用寄存器中的内容作为操作数,寄存就是利用寄存器中的内容作为操作数,寄存器本身就是操作数地址。这种寻址方式是各类微处理器经器本身就是操作数地址。这种寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率较高的寻址方式。常采用的一种方式,也是一种执行效率较高的寻址方式。 例如指令:例如指令: mov r2, r3 ;r2r3 r3中的内容赋给中的内容赋给r2add r2,r3,r4 ;r2r3r4 r3和和r4中的内容相加,结果赋给中的内容相加,结果赋给r20 xaa0 x55r3r2mov r2, r30
3、 xaa53.1.2 3.1.2 立即寻址立即寻址l立即寻址立即寻址也叫立即数寻址,这是一种特殊的寻址方式,操也叫立即数寻址,这是一种特殊的寻址方式,操作数没有存储在寄存器或存储器中,而是作数没有存储在寄存器或存储器中,而是包含在指令的操包含在指令的操作码中作码中,只要取出指令也就取到了操作数。这个操作数被,只要取出指令也就取到了操作数。这个操作数被称为立即数,对应的寻址方式也就叫做立即寻址。称为立即数,对应的寻址方式也就叫做立即寻址。例如指令:例如指令: mov r0, #0 xff000 ;将立即数将立即数0 xff000装入装入r0寄存器寄存器 add r1, r1,0 x7f ; r1
4、r10 x7f 在以上两条指令中,第二个源操作数即为立即数,要求在以上两条指令中,第二个源操作数即为立即数,要求以以“”为前缀,对于以十六进制表示的立即数,还要求为前缀,对于以十六进制表示的立即数,还要求在在“”后加上后加上“0 x”。0 x55r0mov r0, #0 xff00程序存储程序存储mov r0, #0 xff000 xff00从代码中获得数据从代码中获得数据63.1.3 3.1.3 寄存器间接寻址寄存器间接寻址l寄存器间接寻址寄存器间接寻址就是以就是以寄存器中的内容作为操作数的寄存器中的内容作为操作数的地址地址,而操作数本身存放在存储器中。例如指令,而操作数本身存放在存储器中。
5、例如指令 : ldrr1,r2;r1r2 strr1,r2;r2r1 第一条指令将以第一条指令将以r2中的内容为地址,将该地址中的中的内容为地址,将该地址中的数据传送到数据传送到r1中。中。 第二条指令将第二条指令将r1中的内容传送到以中的内容传送到以r2中的内容为地中的内容为地址的存储器中。址的存储器中。0 x55r1r2 0 x400000000 xaa0 x40000000ldr r1, r20 xaa73.1.4 3.1.4 变址寻址变址寻址l变址寻址变址寻址就是将就是将寄存器寄存器(该寄存器一般称作基址寄存器)(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加的内容与指
6、令中给出的地址偏移量相加,从而得到一个操,从而得到一个操作数的有效地址。变址寻址方式常用于访问某基地址附近作数的有效地址。变址寻址方式常用于访问某基地址附近的地址单元。的地址单元。例如指令:例如指令: ldr r0,r1,8 ;r0r18 ldr r0,r1,8! ;r0r18,r1r18 ldr r0,r1,2 ;r0r1,r1r12 ldr r0,r1,r2 ;r0r1r20 x55r0r1 0 x600000000 xaa0 x60000008ldr r0,r1,#0 x080 xaa将将r1+0 x08作为作为地址装载数据地址装载数据83.1.5 3.1.5 寄存器移位寻址寄存器移位寻
7、址l寄存器移位寻址寄存器移位寻址是是arm指令集独有的寻址方式,指令集独有的寻址方式,操作数由操作数由寄存器的数值进行相应移位而得到寄存器的数值进行相应移位而得到;移位的方式在指令中以;移位的方式在指令中以助记符的形式给出,而移位的位数可用立即数或寄存器寻址助记符的形式给出,而移位的位数可用立即数或寄存器寻址方式表示。方式表示。larm微处理器内嵌的微处理器内嵌的桶型移位器桶型移位器(barrel shifter),移位操),移位操作在作在arm指令集中不作为单独的指令使用,它只能作为指指令集中不作为单独的指令使用,它只能作为指令格式中的一个字段,在汇编语言中表示为指令中的选项。令格式中的一个
8、字段,在汇编语言中表示为指令中的选项。 例如,数据处理指令的第例如,数据处理指令的第2个操作数为寄存器时,就可以个操作数为寄存器时,就可以加入移位操作选项对它进行各种移位操作。移位操作包括如加入移位操作选项对它进行各种移位操作。移位操作包括如下下6种类型。种类型。93.1.5 3.1.5 寄存器移位寻址寄存器移位寻址llsl(或(或asl)操作操作 格式为:格式为: 通用寄存器,通用寄存器,lsl(或(或asl) 操作数操作数 lsl(或(或asl)可完成对通用寄存器中的内容进行)可完成对通用寄存器中的内容进行逻辑(或算术)的左移逻辑(或算术)的左移操作,按操作数所指定的数量操作,按操作数所指
9、定的数量向左移位,低位用零来填充,最后一个左移出的位放向左移位,低位用零来填充,最后一个左移出的位放在状态寄存器的在状态寄存器的c位位cpsr29中,如下图所示。中,如下图所示。 其中,操作数可以是通用寄存器,也可以是立即数其中,操作数可以是通用寄存器,也可以是立即数(031)。)。103.1.5 3.1.5 寄存器移位寻址寄存器移位寻址l操作示例:操作示例:mov r0, r1, lsl#2;将;将r1中的内容左移中的内容左移4位后传送到位后传送到r0中,中,;其中把最后移出的位赋给程序状态寄存器的;其中把最后移出的位赋给程序状态寄存器的c位位cpsr29。 31 c 30 29 1 0 0
10、 011llsr操作操作格式为:格式为: 通用寄存器,通用寄存器,lsr 操作数操作数 lsr可完成对通用寄存器中的内容进行可完成对通用寄存器中的内容进行右移右移的操作,的操作,按操作数所指定的数量向右移位,左端用零来填充,最按操作数所指定的数量向右移位,左端用零来填充,最后一个右移出的位放在状态寄存器的后一个右移出的位放在状态寄存器的c位位cpsr29中,中,如后图所示。其中,操作数可以是通用寄存器,也可以如后图所示。其中,操作数可以是通用寄存器,也可以是立即数(是立即数(031)。)。3.1.5 3.1.5 寄存器移位寻址寄存器移位寻址12l操作示例:操作示例:mov r0, r1, ls
11、r#4;将;将r1中的内容右移中的内容右移4位后传送到位后传送到r0中。中。;其中把最后移出的位赋给程序状态寄存器的;其中把最后移出的位赋给程序状态寄存器的c位位cpsr29。 3.1.5 3.1.5 寄存器移位寻址寄存器移位寻址 31 c 30 29 1 000133.1.5 3.1.5 寄存器移位寻址寄存器移位寻址lror操作操作格式为:格式为: 通用寄存器,通用寄存器,ror 操作数操作数 ror可完成对通用寄存器中的内容进行可完成对通用寄存器中的内容进行循环右移循环右移的操的操作,按操作数所指定的数量向右循环移位,右端移出的作,按操作数所指定的数量向右循环移位,右端移出的位填充在左侧的
12、空位处,最后一个右移出的位同时也放位填充在左侧的空位处,最后一个右移出的位同时也放在状态寄存器的在状态寄存器的c位位cpsr29中,如后图所示。其中,中,如后图所示。其中,操作数可以是通用寄存器,也可以是立即数(操作数可以是通用寄存器,也可以是立即数(031)。)。14l操作示例:操作示例:mov r0, r1, ror#4;将;将r1中的内容循环右移中的内容循环右移4位后传送到位后传送到r0中,中,;其中把最后移出的位赋给程序状态寄存器的;其中把最后移出的位赋给程序状态寄存器的c位位cpsr29。 31 c 30 29 1 03.1.5 3.1.5 寄存器移位寻址寄存器移位寻址15lasr操
13、作操作格式为:格式为: 通用寄存器,通用寄存器,asr 操作数操作数 asr可完成对可完成对通用寄存器中的内容进行右移通用寄存器中的内容进行右移的操作,按的操作,按操作数所指定的数量向右移位,最左端的位保持不变,最操作数所指定的数量向右移位,最左端的位保持不变,最后一个右移出的位放在状态寄存器的后一个右移出的位放在状态寄存器的c位位cpsr29 ,如后,如后图所示。其中,操作数可以是通用寄存器,也可以是立即图所示。其中,操作数可以是通用寄存器,也可以是立即数(数(031)。)。 这种移位对有符号数据使用时可以保持符号位不变。这种移位对有符号数据使用时可以保持符号位不变。3.1.5 3.1.5
14、寄存器移位寻址寄存器移位寻址163.1.5 3.1.5 寄存器移位寻址寄存器移位寻址l操作示例:操作示例:mov r0, r1, asr#4;将;将r1中的内容右移中的内容右移4位后传送到位后传送到r0中,中,符号位保持不变符号位保持不变。;最后移出的位同时也送入状态位;最后移出的位同时也送入状态位c中。中。31c3029 1 017lrrx操作操作 rrx操作的格式为:操作的格式为: 通用寄存器,通用寄存器,rrx 操作数操作数 rrx可完成对通用寄存器中的内容进行可完成对通用寄存器中的内容进行带扩展的循环右带扩展的循环右移移的操作,按操作数所指定的数量向右循环移位,左侧空的操作,按操作数所
15、指定的数量向右循环移位,左侧空位由状态寄存器位由状态寄存器c位来填充,右侧移出的位移进状态位位来填充,右侧移出的位移进状态位c中中,如后图所示。其中,操作数可以是通用寄存器,也可以,如后图所示。其中,操作数可以是通用寄存器,也可以是立即数(是立即数(031)。)。3.1.5 3.1.5 寄存器移位寻址寄存器移位寻址18l操作示例:操作示例:mov r0, r1, rrx#2;将;将r1中的内容进行带扩展的循环右移两位后传送到中的内容进行带扩展的循环右移两位后传送到r0中。中。 31 c 30 29 1 03.1.5 3.1.5 寄存器移位寻址寄存器移位寻址19l采用采用多寄存器寻址方式多寄存器
16、寻址方式,一条指令可以完成多个寄存器值,一条指令可以完成多个寄存器值的传送。这种寻址方式可以一次对多个寄存器寻址,多个的传送。这种寻址方式可以一次对多个寄存器寻址,多个寄存器由小到大排列,最多可传送寄存器由小到大排列,最多可传送16个寄存器。个寄存器。 例如例如: ldmia r1!,r2-r4,r5 ;r2r1 ;r3r14 ;r4r18 ;r5r112 该指令的该指令的后缀后缀ia表示在每次执行完加载表示在每次执行完加载/存储操作后,存储操作后,r1按字长度增加按字长度增加,因此,指令可将连续存储单元的值传送,因此,指令可将连续存储单元的值传送到到r2r5。3.1.6 3.1.6 多寄存器
17、寻址多寄存器寻址 使用多寄存器寻址指令时,寄存使用多寄存器寻址指令时,寄存器子集的顺序是按由小到大的顺序器子集的顺序是按由小到大的顺序排列,连续的寄存器可用排列,连续的寄存器可用“”连连接;否则用接;否则用“,”分隔书写。分隔书写。0 x40000000r1r20 x?0 x010 x400000000 x?r3r40 x?r50 x?0 x020 x030 x040 x400000040 x400000080 x4000000c存储器存储器ldmia r1!,r2-r4,r5 0 x400000100 x010 x020 x030 x04203.1.7 3.1.7 堆栈寻址堆栈寻址l堆栈堆栈
18、是一种数据结构,按先进后出(是一种数据结构,按先进后出(first in last out,filo)的方式工作,使用一个称作堆栈指针的专用寄存)的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。器指示当前的操作位置,堆栈指针总是指向栈顶。l当堆栈指针指向最后压入堆栈的数据时,称为当堆栈指针指向最后压入堆栈的数据时,称为满堆栈满堆栈(full stack);而当堆栈指针指向下一个将要放入数据的空而当堆栈指针指向下一个将要放入数据的空位置时,称为位置时,称为空堆栈空堆栈(empty stack)。)。l同时,根据堆栈的生成方式,又可以分为递增堆栈(同时,根据堆
19、栈的生成方式,又可以分为递增堆栈(ascending stack)和递减堆栈()和递减堆栈(decending stack),当),当堆栈由低地址向高地址生成时,称为堆栈由低地址向高地址生成时,称为递增堆栈递增堆栈,当堆栈,当堆栈由高地址向低地址生成时,称为由高地址向低地址生成时,称为递减堆栈递减堆栈。栈顶栈顶sp栈顶栈顶sp栈底栈底空堆栈空堆栈栈底栈底满堆栈满堆栈0 x123456780 x12345678栈顶栈顶sp0 x12345678栈顶栈顶sp压栈压栈压栈压栈213.1.7 3.1.7 堆栈寻址堆栈寻址larm微处理器支持这微处理器支持这四种类型的堆栈工作方式四种类型的堆栈工作方式,
20、即:,即:l满递增方式满递增方式fa(full ascending):堆栈指针指向最后):堆栈指针指向最后入栈的数据位置,且由低地址向高地址生成。入栈的数据位置,且由低地址向高地址生成。l满递减方式满递减方式fd(full decending):堆栈指针指向最后):堆栈指针指向最后入栈的数据位置,且由高地址向低地址生成。入栈的数据位置,且由高地址向低地址生成。l空递增方式空递增方式ea(empty ascending):堆栈指针指向下):堆栈指针指向下一个入栈数据的空位置,且由低地址向高地址生成。一个入栈数据的空位置,且由低地址向高地址生成。l空递减方式空递减方式ed(empty decend
21、ing):堆栈指针指向下):堆栈指针指向下一个入栈数据的空位置,且由高地址向低地址生成。一个入栈数据的空位置,且由高地址向低地址生成。223.1.8 3.1.8 相对寻址相对寻址 l与基址变址寻址方式相类似,与基址变址寻址方式相类似,相对寻址相对寻址以程序计数器以程序计数器pc的的当前值为基地址,指令中的地址标号作为偏移量,将两者当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。相加之后得到操作数的有效地址。l以下程序段完成子程序的调用和返回,跳转指令以下程序段完成子程序的调用和返回,跳转指令bl采用了采用了相对寻址方式:相对寻址方式: bl next;跳转到子程
22、序;跳转到子程序next处执行处执行 next movpc,lr;从子程序返回;从子程序返回23本章提要本章提要arm处理器的寻址方式处理器的寻址方式arm指令集指令集thumb指令集指令集243.2 arm3.2 arm指令集指令集larm微处理器的指令集是微处理器的指令集是加载加载/存储型存储型的,即指令集仅的,即指令集仅能处理寄存器中的数据,处理结果仍要放回寄存器中,能处理寄存器中的数据,处理结果仍要放回寄存器中,而对而对系统存储器的访问则需要通过专门的加载系统存储器的访问则需要通过专门的加载/存储指令存储指令来完成来完成。larm9指令集,包括指令集,包括arm指令集指令集thumb指
23、令集。指令集。l首先介绍首先介绍arm指令的基本格式及灵活的操作数,然后介指令的基本格式及灵活的操作数,然后介绍条件码,再把绍条件码,再把arm指令集、指令集、thumb指令集按类分别说指令集按类分别说明。明。25arm指令的基本格式如下:指令的基本格式如下: s , 其中其中号内的项是必须的,号内的项是必须的,号内的项是可选的。号内的项是可选的。 各项的说明如下:各项的说明如下:opcode:指令助记符;:指令助记符;cond:执行条件;:执行条件;s:是否影响:是否影响cpsr寄存器的值;寄存器的值;rd:目标寄存器;:目标寄存器;rn:第:第1个操作数的寄存器;个操作数的寄存器;op2:
24、第:第2个操作数;个操作数;3.2.1 3.2.1 指令格式指令格式26 arm指令的基本格式如下:指令的基本格式如下:3.2 3.2 指令集介绍指令集介绍larm指令集指令集第第2个操作数个操作数 灵活的使用第灵活的使用第2个操作数个操作数“op2”能够提高代码效率。能够提高代码效率。它有如下的形式:它有如下的形式:#immed_8r常数表达式;常数表达式;rm寄存器方式;寄存器方式;rm, shift寄存器移位方式;寄存器移位方式; s , 273.2 3.2 指令集介绍指令集介绍larm指令集指令集第第2个操作数个操作数#immed_8r常数表达式常数表达式 该常数必须对应该常数必须对应
25、8位位图,即必须是位位图,即必须是一个一个8位的常数位的常数通过循环右移偶数位可以得到的数通过循环右移偶数位可以得到的数。循环右移循环右移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 0 0移位前的移位前的8位常数位常数0 x12移位后得到的常数移位后得到的常数0 x04800000283.2 3.2 指令集介绍指令集介绍
26、larm指令集指令集第第2个操作数个操作数#immed_8r常数表达式常数表达式 该常数必须对应该常数必须对应8位位图,即必须是一个位位图,即必须是一个8位的常数位的常数通过循环右移偶数位通过循环右移偶数位可以得到的数。可以得到的数。例如:例如:mov r0, #1andr1, r2, #0 x0fmov r1, #0 xc000 ;0 xc000可由可由0 x03循环右移循环右移16位得到位得到29可以由可以由0 x4a循环右移循环右移10位得到位得到2.请列举请列举2个个8位图立即数?位图立即数? 思考与练习思考与练习? ?1.以下以下8位图立即数是否合法?位图立即数是否合法?0 x010
27、3c0000 x128000000 x4000003b(0 xed循环右移循环右移2位)位)0 x0016c000(0 x5b循环右移循环右移18位)位)303.2 3.2 指令集介绍指令集介绍larm指令集指令集第第2个操作数个操作数rm寄存器方式寄存器方式 在寄存器方式下,操作数即为寄存器的数值。在寄存器方式下,操作数即为寄存器的数值。例如:例如:subr1, r1 ,r2mov pc, r0313.2.2 3.2.2 条件码条件码l当处理器工作在当处理器工作在arm状态时,几乎所有的指令均根据状态时,几乎所有的指令均根据cpsr中条件码的状态和指令的条件域有条件的执行。当指令的执中条件码
28、的状态和指令的条件域有条件的执行。当指令的执行条件满足时,指令被执行,否则指令被忽略。行条件满足时,指令被执行,否则指令被忽略。l每一条每一条arm指令包含指令包含4位的条件码位的条件码,位于指令的最高,位于指令的最高4位位31:28。条件码共有。条件码共有16种,每种条件码可用两个字符表示,种,每种条件码可用两个字符表示,这两个字符可以添加在指令助记符的后面和指令同时使用。这两个字符可以添加在指令助记符的后面和指令同时使用。例如,跳转指令例如,跳转指令b可以加上后缀可以加上后缀eq变为变为beq表示表示“相等则相等则跳转跳转”,即当,即当cpsr中的中的z标志置位时发生跳转。标志置位时发生跳
29、转。l在在16种条件标志码中,只有种条件标志码中,只有15种可以使用。种可以使用。323.2.2 3.2.2 条件码条件码条件码条件码助记符后缀助记符后缀标标 志志含含 义义0000eqz置位置位相等相等0001nez清零清零不相等不相等0010csc置位置位无符号数大于或等于无符号数大于或等于0011ccc清零清零无符号数小于无符号数小于0100min置位置位负数负数0101pln清零清零正数或零正数或零0110vsv置位置位溢出溢出0111vcv清零清零未溢出未溢出1000hic置位置位z清零清零无符号数大于无符号数大于1001lsc清零清零z置位置位无符号数小于或等于无符号数小于或等于1
30、010gen等于等于v带符号数大于或等于带符号数大于或等于1011ltn不等于不等于v带符号数小于带符号数小于1100gtz清零且(清零且(n等于等于v)带符号数大于带符号数大于1101lez置位或(置位或(n不等于不等于v)带符号数小于或等于带符号数小于或等于1110al忽略忽略无条件执行无条件执行33c代码:代码:if(a b) a+;else b+;对应的汇编代码:对应的汇编代码:cmp r0, r1;r0与与r1比较比较addhi r0, r0, #1 ;c置位置位z清零,无符号数大于清零,无符号数大于;若若r0r1,则,则r0=r0+1addls r1, r1, #1;若若r0r1,
31、则,则r1=r1+1示例:示例:3.2.2 3.2.2 条件码条件码343.2.3 arm 3.2.3 arm 存储器访问指令存储器访问指令larm微处理器内部没有微处理器内部没有ram,而,而arm除了寄存器(即除了寄存器(即r0r15)外没有别的存储单元;)外没有别的存储单元;l在以在以arm为核的嵌入式系统中,所有的外围模块都和存储为核的嵌入式系统中,所有的外围模块都和存储单元一样,是单元一样,是arm微处理器的不同的地址单元。不管这些微处理器的不同的地址单元。不管这些模块的功能如何(如输入模块的功能如何(如输入/输出、定时器、存储器等),也输出、定时器、存储器等),也不管这些模块的位置
32、如何(如片内或片外),不管这些模块的位置如何(如片内或片外),arm微处理微处理器都把它们看作是外部存储器。其操作过程和对存储器的器都把它们看作是外部存储器。其操作过程和对存储器的操作是相同的。操作是相同的。353.2.3 arm 3.2.3 arm 存储器访问指令存储器访问指令l在在arm微处理器的数据传送中,微处理器的数据传送中,数据的源和数据的目标数据的源和数据的目标只只有两种:一种是有两种:一种是arm的寄存器的寄存器r0r15;另一种就是外部;另一种就是外部存储器存储器(它们可能是外围模块的寄存器、外部数据存储器(它们可能是外围模块的寄存器、外部数据存储器或可访问的程序存储器等)。或
33、可访问的程序存储器等)。l我们把数据从存储器到寄存器的传送我们把数据从存储器到寄存器的传送叫加载,叫加载,数据从寄存数据从寄存器到存储器的传送器到存储器的传送叫存储。叫存储。存储器存储器寄存器(寄存器(r0-15)arm微处理器微处理器外围模块或芯片外围模块或芯片存储存储加载加载36加载指令:加载指令:存储指令:存储指令:存储器存储器源地址源地址目标寄存器目标寄存器存储器存储器目标地址目标地址源寄存器源寄存器3.2.3 arm 3.2.3 arm 存储器访问指令存储器访问指令373.2.3 arm 3.2.3 arm 存储器访问指令存储器访问指令l加载加载/存储指令可分为存储指令可分为3类:类
34、:l单一数据加载单一数据加载/存储指令存储指令l批量数据加载批量数据加载/存储指令存储指令l数据交换指令数据交换指令381单一数据加载单一数据加载/存储指令存储指令(1)ldr指令指令格式为:格式为:ldr条件条件 目的寄存器,目的寄存器, ldr指令是指令是字加载指令字加载指令,用于从存储器中将一个,用于从存储器中将一个32位位的字数据传送到目的寄存器中。的字数据传送到目的寄存器中。3.2.3 arm 3.2.3 arm 存储器访问指令存储器访问指令39l指令示例:指令示例:ldr r3,r4 ;将存储器地址为;将存储器地址为r4的字数据读入寄存器的字数据读入寄存器r3。ldr r3,r1,
35、r2 ;将存储器地址为;将存储器地址为r1+r2的字数据读入寄存器的字数据读入寄存器r3。ldr r3,r1,8 ;将存储器地址为;将存储器地址为r1+8的字数据读入寄存器的字数据读入寄存器r3。ldr r3,r1,r2! ;将存储器地址为;将存储器地址为r1+r2的字数据读入寄存器的字数据读入寄存器r3,并将新,并将新地址地址r1r2写入写入r1。ldr r3,r1,8 ! ;将存储器地址为;将存储器地址为r1+8的字数据读入寄存器的字数据读入寄存器r3,并将新地,并将新地址址r18写入写入r1。零偏移:零偏移: 如:如:ldr rd, rn前索引偏移前索引偏移:如:如:ldr rd, rn
36、, #0 x04!程序相对偏移程序相对偏移:如:如:ldr rd, labe1 后索引偏移后索引偏移:如:如:ldr rd, rn, #0 x043.2.3 arm 3.2.3 arm 存储器访问指令存储器访问指令400 x55r3r4 0 x400000000 x12345678 0 x40000000存储器存储器地址地址应用示例:应用示例:ldrr3, r4 ;将将r4指向地址的字数据存入指向地址的字数据存入r30 x123456783.2.3 arm 3.2.3 arm 存储器访问指令存储器访问指令41ldr r3,r1,r2;将存储器地址为;将存储器地址为r1的字数据读入寄存器的字数据
37、读入寄存器r3,并将新地,并将新地址址r1r2写入写入r1。ldr r3,r1,r2,lsl3!;将存储器地址为;将存储器地址为r1r28的字数据读入寄存器的字数据读入寄存器r3,并将新地址并将新地址r1r28写入写入r1。ldr r3,r1,r2,lsl3;将存储器地址为;将存储器地址为r1的字数据读入寄存器的字数据读入寄存器r3,并将新地,并将新地址址r1r28写入写入r1。注:注:r15不可以作为偏移寄存器使用。不可以作为偏移寄存器使用。3.2.3 arm 3.2.3 arm 存储器访问指令存储器访问指令42(2)ldrb指令指令 格式为:格式为: ldr条件条件b 目的寄存器,目的寄存
38、器, ldrb指令是指令是字节加载指令字节加载指令,用于从存储器中将一个,用于从存储器中将一个8位的字节数据传送到目的寄存器中,同时将寄存器的位的字节数据传送到目的寄存器中,同时将寄存器的高高24位清零。位清零。 该指令通常用于从存储器中读取该指令通常用于从存储器中读取8位的字节数据到通位的字节数据到通用寄存器,然后对数据进行处理。用寄存器,然后对数据进行处理。3.2.3 arm 3.2.3 arm 存储器访问指令存储器访问指令43指令示例:指令示例:ldrb r3,r1 ;将存储器地址为;将存储器地址为r1的字节数据读入寄存器的字节数据读入寄存器r0,并,并将将r3的高的高24位清零。位清零
39、。ldrb r3,r1,8 ;将存储器地址为;将存储器地址为r18的字节数据读入寄存器的字节数据读入寄存器r3,并将并将r3的高的高24位清零。位清零。3.2.3 arm 3.2.3 arm 存储器访问指令存储器访问指令44(3)ldrh指令指令格式为:格式为: ldr条件条件h 目的寄存器,目的寄存器, ldrh指令是指令是无符号半字加载指令无符号半字加载指令,用于从存储器中将,用于从存储器中将一个一个16位的半字数据传送到目的寄存器中,同时将寄存器位的半字数据传送到目的寄存器中,同时将寄存器的高的高16位清零。该指令通常用于从存储器中读取位清零。该指令通常用于从存储器中读取16位的半位的半
40、字数据到通用寄存器,然后对数据进行处理。字数据到通用寄存器,然后对数据进行处理。3.2.3 arm 3.2.3 arm 存储器访问指令存储器访问指令45指令示例:指令示例:ldrh r3,r1;将存储器地址为;将存储器地址为r1的半字数据读入寄存器的半字数据读入寄存器r3,并将,并将r3的高的高16位清零。位清零。ldrh r3,r1,8 ;将存储器地址为;将存储器地址为r18的半字数据读入寄存器的半字数据读入寄存器r3,并,并将将r3的高的高16位清零。位清零。ldrh r3,r1,r2 ;将存储器地址为;将存储器地址为r1r2的半字数据读入寄存器的半字数据读入寄存器r3,并将并将r3的高的
41、高16位清零。位清零。3.2.3 arm 3.2.3 arm 存储器访问指令存储器访问指令46(4)str指令指令格式为:格式为:str条件条件 源寄存器,源寄存器, str指令是指令是字存储指令字存储指令,用于从源寄存器中将一个,用于从源寄存器中将一个32位的字数据传送到存储器中。该指令在程序设计中比较常位的字数据传送到存储器中。该指令在程序设计中比较常用,且寻址方式灵活多样,使用方式可参考指令用,且寻址方式灵活多样,使用方式可参考指令ldr。3.2.3 arm 3.2.3 arm 存储器访问指令存储器访问指令47指令示例:指令示例:strr3,r1,8;将;将r3中的字数据写入以中的字数据
42、写入以r1为地址的存储器中,并将新地为地址的存储器中,并将新地址址r18写入写入r1。strr3,r1,8;将;将r3中的字数据写入以中的字数据写入以r18为地址的存储器中。为地址的存储器中。3.2.3 arm 3.2.3 arm 存储器访问指令存储器访问指令48(5)strb指令指令格式为:格式为: str条件条件b 源寄存器,源寄存器, strb指令是指令是无符号字节存储指令无符号字节存储指令,用于从源寄存器,用于从源寄存器中将一个中将一个8位的字节数据传送到存储器中。该字节数据位的字节数据传送到存储器中。该字节数据为源寄存器中的低为源寄存器中的低8位。位。3.2.3 arm 3.2.3
43、arm 存储器访问指令存储器访问指令49指令示例:指令示例:strb r3,r1 ;将寄存器;将寄存器r3中的字节数据写入以中的字节数据写入以r1为地址的存储器中。为地址的存储器中。strb r3,r1,8;将寄存器;将寄存器r3中的字节数据写入以中的字节数据写入以r18为地址的存储器中。为地址的存储器中。3.2.3 arm 3.2.3 arm 存储器访问指令存储器访问指令50(6)strh指令指令格式为:格式为: str条件条件h 源寄存器,源寄存器, strh指令是指令是无符号半字存储指令无符号半字存储指令,用于从源寄存器,用于从源寄存器中将一个中将一个16位的半字数据传送到存储器中。该半
44、字数据位的半字数据传送到存储器中。该半字数据为源寄存器中的低为源寄存器中的低16位。位。3.2.3 arm 3.2.3 arm 存储器访问指令存储器访问指令51指令示例:指令示例:strh r3,r1 ;将寄存器;将寄存器r3中的半字数据写入以中的半字数据写入以r1为地址的为地址的存储器中。存储器中。strh r3,r1,8 ;将寄存器;将寄存器r3中的半字数据写入以中的半字数据写入以r18为地址为地址的存储器中。的存储器中。3.2.3 arm 3.2.3 arm 存储器访问指令存储器访问指令522批量数据加载批量数据加载/存储指令存储指令 arm微处理器所支持批量数据加载微处理器所支持批量数
45、据加载/存储指令可存储指令可以一次在一片连续的存储器单元和多个寄存器之间以一次在一片连续的存储器单元和多个寄存器之间传送数据,批量加载指令用于将一片连续的存储器传送数据,批量加载指令用于将一片连续的存储器中的数据传送到多个寄存器,批量数据存储指令则中的数据传送到多个寄存器,批量数据存储指令则完成相反的操作。完成相反的操作。3.2.3 arm 3.2.3 arm 存储器访问指令存储器访问指令53常用的加载存储指令如下:常用的加载存储指令如下:ldm(或(或stm)指令)指令格式为:格式为:ldm(或(或stm)条件条件类型类型 基址寄存器基址寄存器!,寄存器列表,寄存器列表 ldm(或(或stm
46、)指令用于从由基址寄存器所指示的一片连)指令用于从由基址寄存器所指示的一片连续存储器到寄存器列表所指示的多个寄存器之间传送数据,该续存储器到寄存器列表所指示的多个寄存器之间传送数据,该指令的常见用途是将多个寄存器的内容入栈或出栈。其中,指令的常见用途是将多个寄存器的内容入栈或出栈。其中,类类型型为以下几种情况:为以下几种情况:3.2.3 arm 3.2.3 arm 存储器访问指令存储器访问指令54lia 每次传送后地址加每次传送后地址加1,递增方式;,递增方式;lib 每次传送前地址加每次传送前地址加1,递增方式;,递增方式;lda 每次传送后地址减每次传送后地址减1,递减方式;,递减方式;l
47、db 每次传送前地址减每次传送前地址减1,递减方式;,递减方式;lfd 满递减堆栈;满递减堆栈;led 空递减堆栈;空递减堆栈;lfa 满递增堆栈;满递增堆栈;lea空递增堆栈。空递增堆栈。3.2.3 arm 3.2.3 arm 存储器访问指令存储器访问指令55l!为可选后缀,若选用该后缀,则当数据传送完毕之为可选后缀,若选用该后缀,则当数据传送完毕之后,将最后的地址写入基址寄存器,否则基址寄存器后,将最后的地址写入基址寄存器,否则基址寄存器的内容不改变。的内容不改变。l基址寄存器不允许为基址寄存器不允许为r15。l寄存器列表可以为寄存器列表可以为r0r15的任意组合,若使用连续的任意组合,若
48、使用连续的寄存器时,可以使用的寄存器时,可以使用“-”表示省略。表示省略。l为可选后缀,这是一个只是在数据块传送中使用的为可选后缀,这是一个只是在数据块传送中使用的后缀,当指令为后缀,当指令为ldm且寄存器列表中包含且寄存器列表中包含r15,选用,选用该后缀时表示:除了正常的数据传送之外,还将该后缀时表示:除了正常的数据传送之外,还将spsr复制到复制到cpsr。同时,该后缀还表示传入或传出的是用。同时,该后缀还表示传入或传出的是用户模式下的寄存器,而不是当前模式下的寄存器。户模式下的寄存器,而不是当前模式下的寄存器。3.2.3 arm 3.2.3 arm 存储器访问指令存储器访问指令56指令
49、示例:指令示例:stmfd r13!,r0,r4-r12,lr;将寄存器列表中的寄存器(;将寄存器列表中的寄存器(r0,r4到到r12,lr)存入)存入堆栈。堆栈。ldmfd r13!,r0,r4-r12,pc;将堆栈内容恢复到寄存器(;将堆栈内容恢复到寄存器(r0,r4到到r12,lr)。)。 在通用存储区,数据存储的方式和堆栈区相近。下面在通用存储区,数据存储的方式和堆栈区相近。下面通过存储通过存储r1、r2和和r3 3个寄存器的个寄存器的4种后缀指令执行前种后缀指令执行前后的存储情况如后图所示。后的存储情况如后图所示。3.2.3 arm 3.2.3 arm 存储器访问指令存储器访问指令5
50、73交换指令交换指令(1)swp指令指令格式为:格式为: swp条件条件 目的寄存器,源寄存器目的寄存器,源寄存器1,源寄存器源寄存器2 swp指令是数据指令是数据字交换字交换指令,用于将源寄存器指令,用于将源寄存器2所指向的所指向的存储器中的字数据传送到目的寄存器中,同时将源寄存器存储器中的字数据传送到目的寄存器中,同时将源寄存器1中的字数据传送到源寄存器中的字数据传送到源寄存器2所指向的存储器中。显然,当所指向的存储器中。显然,当源寄存器源寄存器1和目的寄存器为同一个寄存器时,指令交换该寄和目的寄存器为同一个寄存器时,指令交换该寄存器和存储器的内容。存器和存储器的内容。3.2.3 arm
51、3.2.3 arm 存储器访问指令存储器访问指令58指令示例:指令示例:swp r1,r2,r3 ;将;将r3所指向的存储器中的字数据传送到所指向的存储器中的字数据传送到r1,同时,同时;将;将r2中的字数据传送到中的字数据传送到r3所指向的存储单元。所指向的存储单元。swpeq r1,r1,r2 ;z=1时,完成将时,完成将r2所指向的存储器中的字数据与所指向的存储器中的字数据与;r1中的字数据交换。中的字数据交换。3.2.3 arm 3.2.3 arm 存储器访问指令存储器访问指令59stmib r0!,r1,r2,r3指令执行前指令执行前指令执行后指令执行后r0r3r2r1r0stmia
52、 r0!,r1,r2,r3指令执行前指令执行前指令执行后指令执行后r0r3r2r1r0地址增地址增stmda r0!,r1,r2,r3指令执行前指令执行前指令执行后指令执行后r0r3r2r1r0stmdb r0!,r1,r2,r3指令执行前指令执行前指令执行后指令执行后r0r3r2r1r0地址减地址减3.2.3 arm 3.2.3 arm 存储器访问指令存储器访问指令60(2)swpb指令指令格式为:格式为:swp条件条件b 目的寄存器,源寄存器目的寄存器,源寄存器1,源寄存器源寄存器2 swpb指令是指令是字节交换指令字节交换指令,用于将源寄存器,用于将源寄存器2所所指向的存储器中的字节数据
53、传送到目的寄存器中,指向的存储器中的字节数据传送到目的寄存器中,目的寄存器的高目的寄存器的高24清零,同时将源寄存器清零,同时将源寄存器1中的字节中的字节数据传送到源寄存器数据传送到源寄存器2所指向的存储器中。显然,当所指向的存储器中。显然,当源寄存器源寄存器1和目的寄存器为同一个寄存器时,指令交和目的寄存器为同一个寄存器时,指令交换该寄存器和存储器的内容。换该寄存器和存储器的内容。3.2.3 arm 3.2.3 arm 存储器访问指令存储器访问指令61指令示例:指令示例:swpb r1,r2,r3;将;将r3所指向的存储器中的字节数据传送到所指向的存储器中的字节数据传送到r1,r1的高的高2
54、4位清零,同时将位清零,同时将r2中的低中的低8位数据传送到位数据传送到r3所指向的所指向的存储单元。存储单元。swpb r1,r1,r2;该指令完成将;该指令完成将r2所指向的存储器中的字节数据与所指向的存储器中的字节数据与r1中中的低的低8位数据交换。位数据交换。3.2.3 arm 3.2.3 arm 存储器访问指令存储器访问指令623.2.4 arm 3.2.4 arm 数据处理类指令数据处理类指令l数据处理指令只能对寄存器的内容进行操作,不允许对数据处理指令只能对寄存器的内容进行操作,不允许对存储器中的数据进行操作,也不允许指令直接使用存储存储器中的数据进行操作,也不允许指令直接使用存
55、储器的数据或在寄存器与存储器之间传送数据。器的数据或在寄存器与存储器之间传送数据。l数据处理指令可分为数据处理指令可分为3大类:大类:l数据传送指令数据传送指令l算术逻辑运算指令算术逻辑运算指令l比较指令比较指令63l数据传送指令数据传送指令用于在寄存器和存储器之间进行数据的用于在寄存器和存储器之间进行数据的双向传输。双向传输。l算术逻辑运算指令算术逻辑运算指令完成常用的算术与逻辑的运算,该完成常用的算术与逻辑的运算,该类指令不但将运算结果保存在目的寄存器中,同时更类指令不但将运算结果保存在目的寄存器中,同时更新新cpsr中的相应条件标志位。中的相应条件标志位。l比较指令比较指令是完成对指定的
56、两个寄存器(或是完成对指定的两个寄存器(或1个寄存器,个寄存器,1个立即数)进行比较,不保存运算结果,只影响个立即数)进行比较,不保存运算结果,只影响cpsr中相应的条件标志位。中相应的条件标志位。3.2.4 arm 3.2.4 arm 数据处理类指令数据处理类指令64数据传送指令数据传送指令1.数据传送指令数据传送指令mov和和mvn(1)mov指令指令 格式为:格式为: mov条件条件s 目的寄存器目的寄存器,源操作数,源操作数 mov指令可完成在寄存器之间或寄存器与第指令可完成在寄存器之间或寄存器与第2操作数操作数之间进行数据传送。之间进行数据传送。 其中其中s选项决定指令的操作是否影响
57、选项决定指令的操作是否影响cpsr中条件标志中条件标志位的值,当没有位的值,当没有s时指令不更新时指令不更新cpsr中条件标志位的值。中条件标志位的值。65指令示例:指令示例:movr4,r5;将寄存器;将寄存器r5的内容传送到寄存器的内容传送到寄存器r4movpc,r14;将寄存器;将寄存器r14的内容传送到的内容传送到pc,常用于子程序返回,常用于子程序返回movne r4,r5,lsl2;当;当z=0时,将寄存器时,将寄存器r5的内容逻辑左移的内容逻辑左移2位后传送到位后传送到r4数据传送指令数据传送指令66(2)mvn指令指令格式为:格式为: mvn条件条件s 目的寄存器,源操作数目的
58、寄存器,源操作数 mvn指令可完成在寄存器之间或寄存器与第指令可完成在寄存器之间或寄存器与第2操作数之操作数之间进行数据非传送。与间进行数据非传送。与mov指令不同之处是在传送之前按指令不同之处是在传送之前按位被取反了,即把一个被取反的值传送到目的寄存器中。位被取反了,即把一个被取反的值传送到目的寄存器中。 其中其中s决定指令的操作是否影响决定指令的操作是否影响cpsr中条件标志位的值中条件标志位的值,当没有,当没有s时指令不更新时指令不更新cpsr中条件标志位的值。中条件标志位的值。数据传送指令数据传送指令67(2)mvn指令指令格式为:格式为: mvn条件条件s 目的寄存器,源操作数目的寄
59、存器,源操作数 mvn指令可完成在寄存器之间或寄存器与第指令可完成在寄存器之间或寄存器与第2操作数之间操作数之间进行数据非传送。与进行数据非传送。与mov指令不同之处是在传送之前按位指令不同之处是在传送之前按位被取反了,即把一个被取反的值传送到目的寄存器中。被取反了,即把一个被取反的值传送到目的寄存器中。 其中其中s决定指令的操作是否影响决定指令的操作是否影响cpsr中条件标志位的值,中条件标志位的值,当没有当没有s时指令不更新时指令不更新cpsr中条件标志位的值。中条件标志位的值。数据传送指令数据传送指令68指令示例:指令示例:mvn r0,0;将立即数;将立即数0取反传送到寄存器取反传送到
60、寄存器r0中,完成后中,完成后r0=-1 mvn r1,r2;将将r2取反,结果存到取反,结果存到r1数据传送指令数据传送指令69算术逻辑运算指令算术逻辑运算指令2.算术逻辑运算指令算术逻辑运算指令(1)add指令指令格式为:格式为: add条件条件s 目的寄存器,操作数目的寄存器,操作数1,操作数,操作数2 add指令是指令是加法指令加法指令,用于把两个操作数相加,并,用于把两个操作数相加,并将结果存放到目的寄存器中。将结果存放到目的寄存器中。l 操作数操作数1应是一个寄存器。应是一个寄存器。l操作数操作数2可以是一个寄存器,被移位的寄存器,或一个可以是一个寄存器,被移位的寄存器,或一个立即
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 45828-2025共享闲置物品质量信息描述
- TD/T 1044-2014生产项目土地复垦验收规程
- JJG(烟草)15-2010烟草专用吸阻标准棒检定规程
- 2025学年环翠区八年级上学期历史期末试题:中外历史时间轴历史人物解读
- 化学●广东卷丨2022年广东省普通高中学业水平选择性考试化学试卷及答案
- 被害人陈述38课件
- 考研复习-风景园林基础考研试题附参考答案详解【培优】
- 考研复习-风景园林基础考研试题(研优卷)附答案详解
- 风景园林基础考研资料试题及参考答案详解【基础题】
- 《风景园林招投标与概预算》试题A带答案详解(研优卷)
- 4-02-02-01 国家职业标准客运车辆驾驶员 (2025年版)
- 2024北京西城区四年级(下)期末语文试题及答案
- 【航线补贴绩效评估实证研究-以华夏航空公司为例19000字(论文)】
- 《中国老年高血压管理指南(2023版)》解读
- 电梯五方对讲设计方案
- 24 唐诗三首 《茅屋为秋风所破歌》课件
- 2025年初一下册语文-课内现代文复习23课.《蛟龙探海》(解析版)
- 小升初英语作文写作专题训练题100题(含范文详解)
- 国际化创新型人才培养模式与中俄合作办学实践案例分析
- 附件6工贸高风险企业高危领域较大以上安全风险管控清单
- 一次性使用无菌医疗器械管理制度
评论
0/150
提交评论