




免费预览已结束,剩余60页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章ARM指令集寻址方式,ARM指令寻址方式可分为四大类:数据处理指令寻址Load/Store指令的寻址字、无符号字节寻址半字、有符号字节寻址批量Load/Store指令的寻址协处理指令寻址。,内容提要,3.1ARM指令的编码格式3.2数据处理指令寻址方式3.3Load/Store指令寻址3.4批量Load/Store指令寻址方式3.5协处理器指令寻址方式,3.1ARM指令的编码格式,一般编码格式指令条件码,一般编码格式,每条ARM指令占有4个字节,其指令长度为32位,cond(bit31:28)指令执行的条件码;type(bit27:26)指令类型码,cond(bit31:28)指令执行的条件码;type(bit27:26)指令类型码,cond(bit31:28)指令执行的条件码;type(bit27:26)指令类型码,cond(bit31:28)指令执行的条件码;type(bit27:26)指令类型码,cond(bit31:28)指令执行的条件码;type(bit27:26)指令类型码,cond(bit31:28)指令执行的条件码;type(bit27:26)指令类型码,cond(bit31:28)指令执行的条件码type(bit27:26)指令类型码opcode(bit24:21)指令操作码;S(bit20)决定指令的操作结果是否影响CPSR的条件标志;Rn(bit19:16)包含第一个操作数的寄存器编码;Rd(bit15:12)目标寄存器编码;Operand2(bit11:0)指令第二个操作数。,4;,ARM汇编指令语法格式:S,指令条件码,0000EQ相等Z=10001NE不相等Z=00010CS/HS无符号大于等于C=10011CC/LO无等号小于C=00100MI负数N=10101PL非负数N=00110VS上溢出V=10111VC没有上溢出V=01000HI无符号数大于C=1且Z=01001LS无符号小于等于C=0或Z=11010GE有符号数大于等于N=1且V=1或N=0且V=01011LT有符号数小于N=1且V=0或N=0且V=11100GT有符号数大于Z=0且N=V1101LE有符号数小于/等于Z=1或N!=V1110AL无条件执行,3.2数据处理指令寻址方式,数据处理指令第2操作数的构成方式具体寻址类型,数据处理指令第2操作数的构成方式,立即数方式每个立即数由一个8位的常数进行32位循环右移偶数位得到,其中循环右移的位数由一个4位二进制的两倍表示。即:=immed_8进行32位循环右移(2*rotate_4)位,ZAH,寄存器方式操作数即为寄存器的数值如:MOVR3,R2ADDR0,R1,R2,寄存器移位方式操作数为寄存器的数值做相应的移位而得到。在ARM指令中移位操作包括LSL逻辑左移LSR逻辑右移ASL算术左移与LSL等价ASR算术右移ROR循环右移RRX带扩展的循环右移,具体寻址类型,1.第二操作数为立即数汇编语法格式:#,2.第二操作数为寄存器汇编语法格式:,3.第二操作数为寄存器移位方式,且移位的位数为一个5位的立即数汇编语法格式:,#,4.第二操作数为寄存器移位方式,且移位数值放在寄存器中汇编语法格式:,,5.第二操作数为寄存器进行RRX移位得到汇编语法格式:,RRX,3.3Load/Store指令寻址,Load/Store指令是对内存进行存储/加载数据操作的指令,根据访问的数据格式的不同,将这类指令的寻址分为字、无符号字节的Load/Store指令寻址和半字、有符号字节Load/Store指令寻址两大类。,3.3.1地址计算方法,各种类型的Load/Store指令的寻址方式有两部分组成:一部分为一个基址寄存器,可以为任一个通用寄存器;另一部分为一个地址偏移量,可以加到基址寄存器,也可以从基址寄存器中减去这个数值。有三种形式:立即数、寄存器、寄存器及一个移位常数。,3.3.1地址计算方法,该寻址方式的操作数地址计算方法有3种:前变址不回写法(偏移量方法):基址寄存器的值和地址偏移量作加减法,生成操作数的地址。前变址回写法(事先更新方法):基址寄存器的值和地址偏移量作加减法,生成操作数的地址。指令执行后,这个生成的操作数地址被写入基址寄存器。后变址回写法(事后更新方法):指令将基址寄存器的值作为操作数的地址执行指令,然后基址寄存器的值和地址偏移量作加减法,生成操作数的地址,并写入基址寄存器。,3.3.1地址计算方法,1.寄存器间接寻址寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中。例如以下指令:LDRR0,R1;R0R1STRR0,R1;R1R0,2.基址加变址寻址前变址法:基地址寄存器中的值和地址偏移量先作加减运算,生成的操作数作为内存访问的地址。后变址法:将基地址寄存器中的值直接作为内存访问的地址进行操作,内存访问完毕后基地址寄存器中的值和地址偏移量作加减运算,并更新基地址寄存器。,2.基址加变址寻址前变址法:基地址寄存器中的值和地址偏移量先作加减运算,生成的操作数作为内存访问的地址。后变址法:将基地址寄存器中的值直接作为内存访问的地址进行操作,内存访问完毕后基地址寄存器中的值和地址偏移量作加减运算,并更新基地址寄存器。,3.3.2字、无符号字节寻址,汇编指令语法格式为:LDRBT,STRBT,3.3.2字、无符号字节寻址,其中,号内的项是必须的,号内的项是可选的。表示第2个操作数的内存地址,共有9种格式。1.,#+/-2.,+/-3.,+/-,#4.,#+/-!5.,+/-!6.,+/-,#!7.,#+/-8.,+/-9.,+/-,#,前变址不回写法(偏移量方法),前变址回写法(事先更新方法),后变址回写法(事后更新方法),3.3.2字、无符号字节寻址,1.,#+/-为基址寄存器,为地址偏移量。内存地址address为基址寄存器Rn的值加上/减去偏移量offset_12。例如:LDRR0,R1,#4;将内存单元R1+4中的字读取到R0LDRR0,R1,#-4;将内存单元R1-4中的字读取到R0该寻址方式适合访问结构化数据的数据成员、参数的存取以及栈中数据访问。2.,+/-为基址寄存器,为索引寄存器。内存地址address为基址寄存器Rn的值加上/减去索引寄存器Rm的值。例如:LDRR0,R1,R2;将内存单元R1+R2中的字读取到R0。LDRR0,R1,-R2;将内存单元R1-R2中的字读取到R0该寻址方式适合访问字节数组中的数据成员。3.,+/-,#内存地址address为基址寄存器Rn的值加上/减去地址偏移量。该地址偏移量由索引寄存器Rm的值通过移位得到。例如:LDRR0,R1,R2,LSL#2;将内存单元(R1+R2*4)中的字数据读取到R0寄存器当数组中的数据成员长度大于1个字节时,使用该寻址方式可高效率地访问数组中的数据成员。注意:当R15用作Rn时,内存基地址为当前指令地址加8字节偏移量;当R15用作Rm时,会产生不可预知的结果;,3.3.2字、无符号字节寻址,4.,#+/-!更新基址寄存器的值,当指令执行的条件满足时,生成的地址值将写入基址寄存器Rn中,即事先更新方式。例如:LDRR0,R1,#4!;将内存单元(R1+4)中的字数据;读取到R0中,同时R1=R1+4该寻址方式适合访问数组时,自动进行数组下标的更新。5.,+/-!内存地址address为基址寄存器Rn的值加上/减去索引寄存器Rm的值。当指令执行的条件满足时,生成的地址值将写入基址寄存器中,即事先更新方式。例如:LDRR0,R1,R2!;将内存单元(R1+R2)中的字数据读;取到R0寄存器中,同时R1=R1+R2_x000C_ARM指令寻址方式6.,+/-,#!内存地址address为基址寄存器Rn的值加上/减去地址偏移量。该地址偏移量由索引寄存器Rm的值通过移位得到。当指令执行的条件满足时,生成的地址值将写入基址寄存器中,即事先更新方式。例如:LDRR0,R1,R2,LSL#2!;将内存单元(R1+R2*4);中的字数据读取到R0寄存器,同时R1=R1+R2*4注意:当R15用作Rn或Rm时,会产生不可预知的结果;当Rn和Rm是同一个寄存器时,会产生不可预知的结果;在ARMV6及以上没有这个限制。,3.3.2字、无符号字节寻址,7.,#+/-内存地址为基址寄存器Rn的值。当指令执行的条件满足时,将基址寄存器Rn的值加上/减去地址偏移量生成新的地址值,并将其写入基址寄存器中,即事后更新方式。例如:LDRR0,R1,#4;将内存单元R1中的字数据读取;到R0寄存器中,然后R1=R1+48.,+/-内存地址address为基址寄存器Rn的值。当指令执行的条件满足时,将基址寄存器Rn的值加上/减去索引寄存器Rm的值生成新的地址值,并将其写入基址寄存器中,即事后更新方式。例如:LDRR0,R1,R2;将内存单元R1中的字数据读取到;R0寄存器中,然后R1=R1+R29.,+/-,#内存地址address为基址寄存器Rn的值。当指令执行的条件满足时,将基址寄存器Rn的值加上/减去地址偏移量生成新的地址值,并将其写入基址寄存器中,即事后更新方式。该地址偏移量由索引寄存器Rm的值通过移位得到。例如:LDRR0,R1,R2,LSL#2;将内存单元R1中的字数据;读取到R0寄存器中,然后R1=R1+R2*4注意:当R15用作Rn或Rm时,会产生不可预知的结果;当Rn和Rm是同一个寄存器时,会产生不可预知的结果;在ARMV6及以上没有这个限制。,1.Addressing_mode中的偏移量为立即数前变址不回写形式:,#+/-前变址回写形式:,#+/-!后变址回写形式:,#+/-,偏移量为立即数的指令编码类型WP汇编语法格式01,#+/-10,#+/-11,#+/-!,2.Addressing_mode中的偏移量为寄存器的值前变址不回写形式:,+/-前变址回写形式:,+/-!后变址回写形式:,+/-,偏移量为寄存器的指令编码类型对应关系WP汇编语法格式01,+/-10,+/-11,+/-!,3.Addressing_mode中的偏移量通过寄存器移位得到前变址不回写形式:,+/-,#shift_amount前变址回写形式:,+/-,#shift_amount!后变址回写形式:,+/-,#shift_amount,偏移量为移位寄存器的指令编码类型对应关系WP汇编语法格式01,+/-,#shift_amount10,+/-,#shift_amount11,+/-,#shift_amount!,3.3.3半字、有符号字节寻址,这类指令可用来加载有符号字节、加载有符号半字、加载/存储无符号半字。Load/Store指令对半字、有符号字节操作指令编码格式如下:,加载有符号字节到寄存器:LDRSB,加载有符号半字到寄存器:LDRSH,加载无符号半字到寄存器:LDRH,存储无符号半字到内存:STRH,其中,号内的项是必须的,号内的项是可选的。表示第2个操作数的内存单元地址,共有6种寻址方式。1.,#+/-2.,+/-3.,#+/-!4.,+/-!5.,#+/-6.,+/-,1.,#+/-为基址寄存器,为地址偏移量。内存地址address为基址寄存器Rn的值加上/减去偏移量offset_8。例如:LDRSBR0,R1,#3;将内存单元(R1+3)中的带符号字节数据读取到R0寄存器中,R0中高24位设置成该字节数据的最高符号位2.,+/-为基址寄存器,为索引寄存器。内存地址address为基址寄存器Rn的值加上/减去索引寄存器Rm的值。例如:STRHR0,R1,R2;将寄存器R0中的低16位半字数据保存到内存单元(R1+R2)中注意:当R15用作Rn时,内存基地址为当前指令地址加8字节偏移量;当R15用作Rm时,会产生不可预知的结果;,3.,#+/-!更新基址寄存器的值,内存地址address为基址寄存器Rn的值加上/减去地址偏移量offset_8。当指令执行的条件满足时,生成的地址值将写入基址寄存器Rn中,即事先更新方式。例如:LDRSHR7,R6,#2!;将内存单元(R6+2)中的带符号半字数据读取到R7中,并将R7的高16位设置成该半字数据的最高符号位,同时R6=R6+24.,+/-!内存地址address为基址寄存器Rn的值加上/减去索引寄存器Rm的值。当指令执行的条件满足时,生成的地址值将写入基址寄存器中,即事先更新方式。例如:LDRHR0,R1,R2!;将内存单元(R1+R2)中的半字数据读取到R0寄存器中,R0的高16位设置成0,同时R1=R1+R2注意:当R15用作Rn或Rm时,会产生不可预知的结果;当Rn和Rm是同一个寄存器时,会产生不可预知的结果;在ARMV6及以上没有这个限制。,5.,#+/-内存地址为基址寄存器Rn的值。当指令执行的条件满足时,将基址寄存器Rn的值加上/减去地址偏移量offset_8生成新的地址值,并将其写入基址寄存器中,即事后更新方式。例如:STRHR0,R1,#8;将R0寄存器中的低16位半字数据读取到内存单元(R1)中,指令执行后R1=R1+86.,+/-内存地址address为基址寄存器Rn的值。当指令执行的条件满足时,将基址寄存器Rn的值加上/减去索引寄存器Rm的值生成新的地址值,并将其写入基址寄存器中,即事后更新方式。例如:STRHR0,R1,R2;将R0寄存器中的低16位半字数据读取到内存单元(R1)中,同时指令执行后R1=R1+R2注意:当R15用作Rn或Rm时,会产生不可预知的结果;当Rn和Rm是同一个寄存器时,会产生不可预知的结果;在ARMV6及以上没有这个限制。,1.Addressing_mode中的偏移量为立即数前变址不回写形式:,#+/-前变址回写形式:,#+/-!后变址回写形式:,#+/-,偏移量为立即数的指令编码类型WP汇编语法格式01,#+/-10,#+/-11,#+/-!,2.Addressing_mode中的偏移量为寄存器的值前变址不回写形式:,+/-前变址回写形式:,+/-!后变址回写形式:,+/-,偏移量为寄存器值的指令编码类型对应关系WP汇编语法格式01,+/-10,+/-11,+/-!,3.4批量Load/Store指令寻址方式,ARM指令系统提供了批量Load/Store指令寻址方式,即通常所说的多寄存器寻址,也就是一次可以传送几个寄存器的值,允许一条指令最多传送16个寄存器。一条批量Load/Store指令可以实现在一组寄存器和一块连续的内存单元之间传输数据。,编码格式,批量加载:LDM!,批量存储:STM!,其中,指令中寄存器和内存单元的对应关系满足这样的规则,即编号低的寄存器对应于内存中低地址单元,编号高的寄存器对应于内存中高地址单元,存放内存地址块的起始地址值。!的作用是用于更新表示地址的变化方式,有以下4种方式。IA(IncrementAfter)事后递增方式,每次数据传送后地址加4;IB(IncrementBefore)事先递增方式,每次数据传送前地址加4;DA(DecrementAfter)事后递减方式,每次数据传送后地址减4;DB(DecrementBefore)事先递减方式,每次数据传送前地址减4;,register_list表示要加载或存储的寄存器列表,bit15:0可以表示16个寄存器,如果某位为1,则该位的位置作为寄存器的编号,此寄存器参预加载或存储。汇编语法中寄存器列表的格式为:R0,R3,R5R1-R3或R1,R2,R3,register_list表示要加载或存储的寄存器列表,bit15:0可以表示16个寄存器,如果某位为1,则该位的位置作为寄存器的编号,此寄存器参预加载或存储。S用于恢复CPSR和强制用户位。当程序计数器PC包含在LDM指令的register_list中,且S为1时,则当前模式的SPSR被拷贝到CPSR中,使处理器的程序返回和状态的恢复成为一个原子操作。如果register_list中不包含程序计数器PC,S为1则加载或存储的是用户模式下的寄存器组。,注意事项:指令中寄存器和连续内存地址单元的对应关系:编号低的寄存器对应内存低地址单元,编号高的寄存器对应内存高地址单元。,内存操作,后增IA(IncrementAfter):每次数据传送后地址加4;先增IB(IncrementBefore):每次数据传送前地址加4;后减DA(DecrementAfter):每次数据传送后地址减4;先减DB(DecrementBefore):每次数据传送前地址减4;,它们与指令编码中P、U的对应关如下表所示LDM/STM的地址变化方式addr_modePUDA00IA01DB10IB11,堆栈操作,的另外一种形式堆栈(stacks)是一个按特定顺序进行存取的存储区,操作顺序为“后进先出”。根据数据栈的增长方向,堆栈可分为两种:向上生长栈:数据栈向内存地址增加的方向生长,称为递增堆栈,或Ascending栈。向下生长栈:数据栈向内存地址减小的方向生长,称为递减堆栈,或Descending栈。,堆栈操作,堆栈指针SP可以指向不同的位置。当堆栈指针指向最后一个压入堆栈的有效数据项,称为满堆栈(Full栈);堆栈指针指向下一个待压入数据的空位置,称为空堆栈(Empty栈)。,堆栈操作,的另外一种形式综合这两种特点可以有以下4种数据栈:FA(FullAscending)FD(FullDescending)EA(EmptyAscending)ED(EmptyDescending),堆栈操作,两段代码的执行结果是一样的,但是使用堆栈指令的压栈和出栈操作
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 考点解析湖北省麻城市7年级上册期末测试卷章节练习试题(含答案解析)
- 大数据、“互联网+”和媒体融合试题(卷)答案解析
- 2025年基因治疗药物研发中的临床试验数据监管与合规性分析报告
- 2025年工业互联网在制造业中的应用前景与市场潜力分析报告
- 2025年沉浸式戏剧行业市场潜力与投资价值分析报告
- 2025年土壤污染监测物联网技术应用与治理策略报告
- 2025年快时尚在时尚零售行业变革中的产品包装设计趋势报告
- 2025年广播影视行业媒体融合技术发展趋势报告
- 2025至2030年中国人力资源数字化行业发展趋势预测及投资战略咨询报告
- 推拿治疗学试题附参考答案详解【考试直接用】
- 铁路专项病害课件
- 开学安全教育课件
- 2025年学历类自考专业(学前教育)学前儿童发展-学前教育原理参考题库含答案解析(5套)
- 《海上风电场工程测量规程》(NB-T 10104-2018)
- 《绣球》课件
- “隆德”概念讲解—控制脑容量为目标控制颅内高压
- 遥感图像的目视判读
- 实数单元测试卷含答案
- 轧制原理-PPT课件
- 河底管道围堰专项施工方案
- SY2BVT-1振动仪操作规程5
评论
0/150
提交评论