ARM寻址方式PPT教学课件_第1页
ARM寻址方式PPT教学课件_第2页
ARM寻址方式PPT教学课件_第3页
ARM寻址方式PPT教学课件_第4页
ARM寻址方式PPT教学课件_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、所有的ARM指令都可以条件执行。如果指令不标明条件代码,将默认为无条件(AL)执行。cond项条件执行 ARMARM指令可包含一个可选的条件码,根据指令可包含一个可选的条件码,根据CPSRCPSR中的条件位自动判断是否执行指令,在条中的条件位自动判断是否执行指令,在条件满足时,指令执行,否则指令被忽略。件满足时,指令执行,否则指令被忽略。第1页/共45页条件码条件码助记符后缀助记符后缀标标 志志含含 义义00000000EQEQZ Z置位置位相等相等00010001NENEZ Z清零清零不相等不相等00100010CSCSC C置位置位无符号数大于或等于无符号数大于或等于00110011CCC

2、CC C清零清零无符号数小于无符号数小于01000100MIMIN N置位置位负数负数01010101PLPLN N清零清零正数或零正数或零01100110VSVSV V置位置位溢出溢出01110111VCVCV V清零清零未溢出未溢出10001000HIHIC C置位置位Z Z清零清零无符号数大于无符号数大于10011001LSLSC C清零清零Z Z置位置位无符号数小于或等于无符号数小于或等于10101010GEGEN N等于等于V V带符号数大于或等于带符号数大于或等于10111011LTLTN N不等于不等于V V带符号数小于带符号数小于11001100GTGTZ Z清零且(清零且(N

3、 N等于等于V V)带符号数大于带符号数大于11011101LELEZ Z置位或(置位或(N N不等于不等于V V)带符号数小于或等于带符号数小于或等于11101110ALAL忽略忽略无条件执行无条件执行第2页/共45页C代码:If(a b)a+;Elseb+;对应的汇编代码:CMP R0,R1 ;R0(a)与R1(b)比较ADDHI R0,R0,#1 ;若R0R1,则R0=R0+1ADDLS R1,R1,#1 ;若R0R1,则R1=R1+1示例:第3页/共45页 ARMARM数据处理指令均可根据执行结果来选择是否更新条件码标志。数据处理指令均可根据执行结果来选择是否更新条件码标志。若要更新条

4、若要更新条件码标志,加后缀件码标志,加后缀“S S”。nS项第4页/共45页ARMARM指令集指令集第第2 2个源操作数个源操作数 灵活的使用第2个操作数“operand2”能够提高代码效率。它有如下的形式:#immed_8r常数表达式;Rm寄存器方式;Rm,shift寄存器移位方式;第5页/共45页#immed_8r常数表达式例如:AND R1,R2,#0 x0F第6页/共45页Rm寄存器方式 在寄存器方式下,操作数即为寄存器的数值。例如:SUBR1,R1,R2第7页/共45页LSLLSL:逻辑左移,空出的最低有效位用:逻辑左移,空出的最低有效位用0 0填充。填充。LSRLSR:逻辑右移,空

5、出的最高有效位用:逻辑右移,空出的最高有效位用0 0填充。填充。ASLASL:算术左移,由于左移空出的有效位用:算术左移,由于左移空出的有效位用0 0填充,因此填充,因此 它与它与LSLLSL同义。同义。ASRASR:算术右移,算术移位的对象是带符号数,移位过:算术右移,算术移位的对象是带符号数,移位过程中必须保持操作数的符号不变。如果源操作数是正数,程中必须保持操作数的符号不变。如果源操作数是正数,空出的最高有效位用空出的最高有效位用0 0填充,如果是负数用填充,如果是负数用1 1填充。填充。RORROR:循环右移,移出的字的最低有效位依次填入空出:循环右移,移出的字的最低有效位依次填入空出

6、的最高有效位。的最高有效位。RRXRRX:带扩展的循环右移。将寄存器的内容循环右移:带扩展的循环右移。将寄存器的内容循环右移1 1位,位,空位用原来空位用原来C C标志位填充。标志位填充。Rm,shift寄存器移位方式第8页/共45页 第9页/共45页例如:ADD R1,R1,R1,LSL #3 ;R1=R1+R1R3第10页/共45页语语 法法寻寻 址址 方方 式式1立即数寻址立即数寻址2寄存器寻址寄存器寻址3, LSL #立即数逻辑左移立即数逻辑左移4, LSL 寄存器逻辑左移寄存器逻辑左移5, LSR #立即数逻辑右移立即数逻辑右移6, LSR 寄存器逻辑右移寄存器逻辑右移7, ASR

7、#立即数算术右移立即数算术右移8, ASR 寄存器算术右移寄存器算术右移9, ROR #立即数循环右移立即数循环右移10, ROR 寄存器循环右移寄存器循环右移11, RRX寄存器扩展循环右移寄存器扩展循环右移第11页/共45页数据处理指令寻址方式可以分为以下几种。(1)立即数寻址方式;(2)寄存器寻址方式;(3)寄存器移位寻址方式 。第12页/共45页 立即寻址指令中的操作码字段后面的地址码部分即是操作数本身,也就是说,数据就包含在指令当中,取出指令也就取出了可以立即使用的操作数(这样的数称为立即数)。立即寻址指令举例如下: SUBS R0,R0,#1 ;R0减1,结果放入R0 MOV R0

8、,#0 xFF000 ;将立即数0 xFF000装入R0寄存器注意:立即数以“#”开头,16进制数在“#”后加“0 x”或“&”表示。0 x55R0MOV R0,#0 xFF00程序存储MOV R0,#0 xFF000 xFF00从代码中获得数据1立即数寻址方式第13页/共45页 立即数寻址方式下,立即数必须是对应立即数寻址方式下,立即数必须是对应8 8位位图位位图格式格式,即立即数由一个,即立即数由一个8 8位的常数循环移偶数位得位的常数循环移偶数位得到,因此并不是所有的数都可以用作立即数寻址。到,因此并不是所有的数都可以用作立即数寻址。 在立即数寻址方式中,在立即数寻址方式中,ARMARM

9、只提供了只提供了12bit12bit来放来放数据。其中数据。其中8 8位是用来记录数值的,另外位是用来记录数值的,另外4 4位放移位放移位的位数,以此来形成一个立即数。位的位数,以此来形成一个立即数。 合法的立即数必须能够找到得到它的那个合法的立即数必须能够找到得到它的那个8 8位常位常数,否则这个立即数就是非法的。数,否则这个立即数就是非法的。立即寻址中的立即数第14页/共45页ARM指令的基本格式: S , 其中号内的项是必须的,号内的项是可选的。各项的说明如下:opcode:指令助记符;cond:执行条件;S:是否影响CPSR寄存器的值;Rd:目标寄存器; Rn:第1个操作数的寄存器;o

10、perand2:第2个操作数;为什么要规定8位位图?从指令的编码格式来解释第15页/共45页31-2827-2524-212019-16 15-12 11-0Cond001Opcod SRnRdOperand2opcode:指令助记符;cond:执行条件;S:是否影响CPSR寄存器的值;Rd:目标寄存器; Rn:第1个操作数的寄存器;operand2:第2个操作数; ARM指令格式第16页/共45页为什么要规定8位位图? 表格中的表格中的shifter_operandshifter_operand所占的位数:所占的位数:1212位。要用一个位。要用一个1212位的位的编码来表示任意的编码来表示

11、任意的3232位数是绝对不可能的(位数是绝对不可能的(1212位数有位数有2 21212种可能,种可能,而而3232位数有位数有2 23232种种). ). 但是又要用但是又要用1212位的编码来表示位的编码来表示3232位数位数 怎么办?怎么办? 第17页/共45页为什么要规定8位位图? 在表示数的数量上做限制。在表示数的数量上做限制。 通过编码来实现用通过编码来实现用1212位的编码来表示位的编码来表示3232位位数。数。 在在1212位的位的shifter_operandshifter_operand中:中:8 8位存数据,位存数据,4 4位存放移位的次数。位存放移位的次数。 8 8位存

12、数据位存数据- -该常数必须对应该常数必须对应8 8位位图。位位图。 4 4位存移位的次数位存移位的次数- -移偶数位。移偶数位。 4 4位只有位只有1616种可能值,而种可能值,而3232位数可以循环移位位数可以循环移位3232次(次(3232种可能),那就只好限制:只能移偶种可能),那就只好限制:只能移偶数位(两位两位的移,好像一个数位(两位两位的移,好像一个1616位数在移位,位数在移位,1616种移位可能)。种移位可能)。第18页/共45页举例AND R1,R2,#0 xffAND R1,R2,#0 xff 0 xff为8位二进制数,处理器就将其直接放进8位“基本”数中,而4位“移位”

13、数则为0.AND R1,R2,#0 x104AND R1,R2,#0 x104 0 x104已经超过了8位二进制数,如何表示如何表示? 0 x104的二进制: 0000 0000 0000 0000 0000 0001 0000 0000 0000 0000 0000 0000 0001 0000 01000100,是0000 0000 0000 0000 0000 0000 0100 0000 0000 0000 0000 0000 0000 0100 00010001通过循环右移30位得到的。 因此改造后的结果是8位“基本”数中存放0100 0001,而“移位”数为15。第19页/共45页

14、怎么判别是否合法? 第一,看这个数转换成二进制后第一,看这个数转换成二进制后1 1的个数是否不超过的个数是否不超过8 8个个 如果不超过如果不超过8 8个,再看这个,再看这n n个个1 1(n n)是否能同时放到)是否能同时放到8 8个二进制位中个二进制位中 如果可以放进去,再看这八个二进制位是否可以循环右移偶数位得到起初被判断的那个数值,如果可以,如果可以放进去,再看这八个二进制位是否可以循环右移偶数位得到起初被判断的那个数值,如果可以,则此数值即为符合则此数值即为符合8 8位位图原理,否则不合法。位位图原理,否则不合法。 第20页/共45页合法立即数合法立即数 0 x3F8 0 x3F8是

15、合法的,把它写成二进制形式为:是合法的,把它写成二进制形式为:0011111111000b,0011111111000b,使使用用0 xFE0 xFE(11111110b11111110b)循环向左移动)循环向左移动2 2位可以得到位可以得到0 x3F8 0 x3F8 第21页/共45页练习1.#0 xff0000002.0 x101 3.0 x102 4.0 xC00000035.0 xff1 6.0 x6000000E第22页/共45页 操作数的值在寄存器中,指令中的地址码字段指出的是寄存器编号,指令执行时直接取出寄存器值来操作。寄存器寻址指令举例如下: MOV R1,R2 ;将R2的值存

16、入R1 SUB R0,R1,R2 ;将R1的值减去R2的值,结果保存到R0 注意:第1个是目的寄存器,然后是第一操作数寄存器,最后是第二操作数寄存器。0 xAA0 x55R2R1寄存器寻址方式寄存器寻址方式MOV R1,R20 xAA第23页/共45页 寄存器移位寻址是ARM指令集特有的寻址方式。当第2个操作数是寄存器移位方式时,第2个寄存器操作数在与第1个操作数结合之前,选择进行移位操作。寄存器移位寻址指令举例如下:MOVR0,R2,LSL #3;R2的值左移3位,结果放入R0, ;即是R0=R28 ANDS R1,R1,R2,LSL R3 ;R2的值左移R3位,然后和R1相 ;“与”操作,

17、结果放入R10 x55R0R2 0 x01寄存器移位寻址方式寄存器移位寻址方式MOV R0,R2,LSL #30 x080 x08逻辑左移3位第24页/共45页2.7.2 内存访问指令寻址方式内存访问指令的寻址方式可以分为以下几种: (1)字及无符号字节的Load/Store指令的 寻址方式; (2)杂类Load/Store指令的寻址方式; (3)批量Load/Store指令的寻址方式; (4)协处理器Load/Store指令的寻址方式。 第25页/共45页 字及无符号字节的Load/Store指令语法格式如下:LDR|STRBT ,1字及无符号字节的Load/Store指令的寻址方式注:1.

18、B为加载字节数据。 2.T为可选后缀。若指令有T,那么即使处理器在特权模式下,存储系统也将访问看成是在用户模式下进行的。T在用户模式下无效。第26页/共45页格格 式式模模 式式1Rn,#立即数偏移寻址立即数偏移寻址2Rn,Rm寄存器偏移寻址寄存器偏移寻址3Rn,Rm,#带移位的寄存器偏移寻址带移位的寄存器偏移寻址4Rn,#!立即数前索引寻址立即数前索引寻址5Rn,Rm!寄存器前索引寻址寄存器前索引寻址6Rn,Rm,#!带移位的寄存器前索引寻址带移位的寄存器前索引寻址7Rn,#立即数后索引寻址立即数后索引寻址8Rn,寄存器后索引寻址寄存器后索引寻址9Rn,#带移位的寄存器后索引寻址带移位的寄存

19、器后索引寻址第27页/共45页1.立即数偏移寻址: LDRR2,R3,#0 x0C 注:读取R3+0 x0C地址上的存储单元的内容,放入R2 2.寄存器偏移寻址: LDRR0,R1,R2 注:读取R1+R2地址上的存储单元的内容,放入R03.带移位的寄存器偏移寻址: LDR R1,R0,R2,LSL #2 注:R1-R0+R2*4第28页/共45页4.前索引寻址:是将基址与偏移量相加作为传送数据的地址,传送数据后将数据的地址传送给基址寄存器。 LDR Rd,Rn,#0 x04! 注:在数据传送之前,将偏移量加到Rn中,其结果作为传送数据的存储地址。使用后缀“!”,则结果写回到Rn中。5.后索引

20、寻址:是将基址作为传送数据的地址,传送数据后自动将基址的内容与偏移量相加传送给基址寄存器。 LDR Rd,Rn,#-0 x02 注: Rn的值用做传送数据的存储地址。在数据传送后,将偏移量与Rn相加,结果写回到Rn中。第29页/共45页 使用该类寻址方式的指令的语法格式如下:LDR|STRH|SH|SB|D ,2杂类Load/Store指令的寻址方式注:1.B:字节,H:半字,D:双字。 2.S:加载有符号数。第30页/共45页格格 式式模模 式式1Rn,#立即数偏移寻址立即数偏移寻址2Rn,Rm寄存器偏移寻址寄存器偏移寻址3Rn,#!立即数前索引寻址立即数前索引寻址4Rn,Rm!寄存器前索引

21、寻址寄存器前索引寻址5Rn,#立即数后索引寻址立即数后索引寻址6Rn,寄存器后索引寻址寄存器后索引寻址第31页/共45页又称为多寄存器寻址方式、块拷贝寻址方式功能: 批量Load/Store指令将一片连续内存单元的数据加载到通用寄存器组中或将一组通用寄存器的数据存储到内存单元中。该类指令的语法格式如下:LDM|STM !,3批量Load/Store指令寻址方式第32页/共45页格格 式式模模 式式1IA(Increment After)后递增方式后递增方式(每次传送(每次传送后地址加后地址加4)2IB(Increment Before)先递增方式先递增方式(每次传送(每次传送前地址加前地址加4

22、)3DA(Decrement After)后递减方式后递减方式(每次传送(每次传送后地址减后地址减4)4DB(Decrement Before)先递减方式先递减方式(每次传送(每次传送前地址减前地址减4)第33页/共45页允许一条指令传送16个寄存器的任何子集或所有寄存器。举例如下: LDMIA R1!,R2-R7,R12 ;将R1指向的单元中的数据读出到 ;R2R7、R12中(R1自动加4) STMIA R0!,R2-R7,R12;将寄存器R2R7、R12的值保 ;存到R0指向的存储单元中 ;(R0自动加4)注意:寄存器子集的顺序是按由小到大的顺序排列,连续的寄存器可用“-”连接;否则用“,

23、”分隔书写。0 x40000000R1R2 0 x?0 x010 x400000000 x?R3R4 0 x?R6 0 x?0 x020 x030 x040 x400000040 x400000080 x4000000C存储器LDMIA R1!,R2-R4,R6 0 x010 x020 x030 x040 x40000010第34页/共45页举例:举例:LDMIA R0!,R3-R9 ;将将R0指向的内存地址上指向的内存地址上的多字的多字 ;数据读出到数据读出到R3R9中中(R0自自动加动加4) STMIA R1!,R3-R9 ;将寄存器将寄存器R3R9的值保存到的值保存到 ;R1指向的存储单

24、元中指向的存储单元中(R1自动自动加加4)第35页/共45页第36页/共45页4堆栈操作寻址方式 堆栈是一个按特定顺序进行存取的存储区,操作顺序为“后进先出”。堆栈寻址是隐含的,它使用一个专门的寄存器(堆栈指针)指向一块存储区域(堆栈),指针所指向的存储单元即是堆栈的栈顶。第37页/共45页4堆栈操作寻址方式 根据不同的寻址方式,将堆栈分为以下4种。 (1)Full栈:堆栈指针指向栈顶元素。 (2)Empty栈:堆栈指针指向第一个可用元素。 (3)递减栈:堆栈向内存地址减小的方向生长,即向下生长。 (4)递增栈:堆栈向内存地址增加的方向生长,即向上生长。第38页/共45页栈顶SP栈顶SP栈底空堆栈栈底满堆栈 堆栈指针指向最后压入的堆栈的有效数据项,称为满堆栈(先跳SP,再放数据);堆栈指针指向下一个待压入数据的空位置,称为空堆栈(先放

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论