3.LDR和STR—双字 加载两个相邻的寄存器和存储两个相邻的寄存器,64 位双字。 句法: 1.op {cond}D Rd,[Rn] 2.op {cond)D Rd,[Rn,offset]{! 3.op {cond}D Rd,label 4.op {cond}D Rd,[Rn],offset Rd:加载或存储寄存器其中一个,另一个必须是 R(d+1)。必须是偶数,且不是R14。 Rn:除非指令为零偏移,或不带回索引,否则,Rn不允 许与Rd或R(d+)相同。 ,对于双字传送,地址必须是8的倍数
3. LDR和STR——双字 • 加载两个相邻的寄存器和存储两个相邻的寄存器,64 位双字。 • 句法: 1. op {cond} D Rd,[Rn] 2. op {cond} D Rd,[Rn,offset] {!} 3. op {cond} D Rd,label 4. op {cond} D Rd,[Rn],offset Rd:加载或存储寄存器其中一个,另一个必须是 R(d+1)。必须是偶数,且不是R14。 Rn:除非指令为零偏移,或不带回索引,否则,Rn不允 许与Rd或R(d+1)相同。 • 对于双字传送,地址必须是8的倍数
LDR和STR一双字 ·例子: LDRD R6,[R11] LDRMID R4,[R7],R2 STRD R4,[R9,#24] STRD R0,[R9,-R2]! LDREQD R8,abc4 LDRD R1,[R6] × STRD R14,[R9,#36] X
• 例子: LDRD R6,[R11] LDRMID R4,[R7],R2 STRD R4,[R9,#24] STRD R0,[R9,-R2]! LDREQD R8,abc4 LDRD R1,[R6] × STRD R14,[R9,#36] × LDR和STR——双字
4.LDM和STM 加载多个寄存器和存储多个寄存器。可以传送R0 R15的任何组合。 句法: op {cond}mode Rn {}reglist [ 其中: mode为IA、IB、DA、DB、FD、ED、FA、EA。 reglist:加载或存储的寄存器列表,包含在括号中。它也可 以包含寄存器的范围。若包含多于1个寄存器或包含寄存器 范围,则必须用逗号分开。 :可选模式,不允许在用户模式或系统模式下使用。它有 两个目的: 若op是LDM且reglist包含PC,那么除了正常的多寄存器传送 外,将SPSR也拷贝到CPSR中。这用于从异常处理返回,仅在 异常模式下使用。 数据传入或传出的是用户模式的寄存器,而不是当前模式的寄 存器
4. LDM和STM • 加载多个寄存器和存储多个寄存器。可以传送R0- R15的任何组合。 • 句法: op {cond} mode Rn {!},reglist {^} 其中: • mode为IA、IB、DA、DB、FD、ED、FA、EA。 • reglist:加载或存储的寄存器列表,包含在括号中。它也可 以包含寄存器的范围。若包含多于1个寄存器或包含寄存器 范围,则必须用逗号分开。 • ^:可选模式,不允许在用户模式或系统模式下使用。它有 两个目的: – 若op是LDM且reglist包含PC,那么除了正常的多寄存器传送 外,将SPSR也拷贝到CPSR中。这用于从异常处理返回,仅在 异常模式下使用。 – 数据传入或传出的是用户模式的寄存器,而不是当前模式的寄 存器
LDM和STM ·带写回的加载或存储基址寄存器 如果Rn包含在寄存器列表中,且用后缀“!”指明要写 ▣(write back),那么 若op是STM,且Rn是寄存器列表中数字最小的寄存器, 则将Rn的初值保存。 -Rn的加载和存储值不可预知。 ·例: LDMIA R8,{R0,R2,R9} STMDB R1!,{R3-R6,R11,R12} STMFD R13!,{R0,R4-R7,LR} LDMFD R13!,{R0,R4-R7,PC} STMIA R5!,{R5,R4,R9} X LDMDA R2,{} ×
• 带写回的加载或存储基址寄存器 如果Rn包含在寄存器列表中,且用后缀“!”指明要写 回(write back),那么 – 若op是STM,且Rn是寄存器列表中数字最小的寄存器, 则将Rn的初值保存。 – Rn的加载和存储值不可预知。 • 例: LDMIA R8,{R0,R2,R9} STMDB R1!,{R3-R6,R11,R12} STMFD R13!,{R0,R4-R7,LR} LDMFD R13!,{R0,R4-R7,PC} STMIA R5!,{R5,R4,R9} × LDMDA R2,{ } × LDM和STM
5.PLD Cache预加载 句法: PLD [Rn,Flexoffset 其中,Flexoffset的含义和第1条传输指令定义一样。 用法: 使用PLD(PreLoad)提示存储器系统从后面的几条新指令所制 定的存储器地址加载。存储系统可使用这种方法加速以后的 存储器访问。 例子: PLD [R2] PLD [R15,#280] PLD [R0,R2] PLD [R5,R8,LSL#2]
5. PLD • Cache预加载 • 句法: PLD [Rn{,Flexoffset}] 其中,Flexoffset的含义和第1条传输指令定义一样。 • 用法: 使用PLD(PreLoad)提示存储器系统从后面的几条新指令所制 定的存储器地址加载。存储系统可使用这种方法加速以后的 存储器访问。 • 例子: PLD [R2] PLD [R15,#280] PLD [R0,R2] PLD [R5,R8,LSL #2]