6.SWP 在寄存器和存储器之间进行数据交换。 句法: SWP {cond}{B}Rd,Rm,[Rn] 其中: Rd:寄存器。 数据从存储器加载到Rd。 Rm:寄存器。Rm的内容存储到存储器。Rm可以与Rd相 同。在这种情况下,寄存器的内容和存储器的内容进行 交换。 Rn:寄存器,必须与Rd和Rm不同
6. SWP • 在寄存器和存储器之间进行数据交换。 • 句法: SWP {cond} {B} Rd,Rm,[Rn] 其中: Rd:寄存器。数据从存储器加载到Rd。 Rm:寄存器。Rm的内容存储到存储器。Rm可以与Rd相 同。在这种情况下,寄存器的内容和存储器的内容进行 交换。 Rn:寄存器,必须与Rd和Rm不同
ARM数据处理指令 1、灵活的第二操作数 大多数ARM通用数据处理指令有一个灵活的第二 操作数。在每条指令的句法中用Operand2表示 句法: Operand2有两种可能的形式: #immed 8r Rm,shift) ·Immed8r:取值为数字常量的表达式。常量必须是 对应于8位位图(pattern)在32位字中被循环移位 偶数位(0、2、4..)后的值。 -例:合法常量:0xFF、0x104、0xFF0、0xF000000F -非法常量:0x101、0x102、0xFF1、0xFF04 ·Rm:存储第二操作数的寄存器
ARM数据处理指令 1、灵活的第二操作数 大多数ARM通用数据处理指令有一个灵活的第二 操作数。在每条指令的句法中用Operand2表示 句法: Operand2有两种可能的形式: #immed_8r Rm{,shift} • Immed_8r:取值为数字常量的表达式。常量必须是 对应于8位位图(pattern)在32位字中被循环移位 偶数位(0、2、4…)后的值。 – 例:合法常量:0xFF、0x104、0xFF0、0xF000000F – 非法常量:0x101、0x102、0xFF1、0xFF04 • Rm:存储第二操作数的寄存器
灵活的第二操作数 shit:Rm的可选移位方法。可以是以下方法的任何一种: ASR n 算术右移n位(1≤n≤32) LSL n 逻辑左移n位(1≤n≤31) LSR n 逻辑右移n位(1≤n≤32) ROR n 循环右移n位(1≤n≤31) RRX 带扩展的循环右移1位 type rs 其中:type:ARS、LSL、LSR和ROR的一种。 RS:提供移位量的寄存器,仅使用最低 有效字节 在指令中移位操作的结果用做Operand2,但Rm本身不变 RRX: S=1
• shift:Rm的可选移位方法。可以是以下方法的任何一种: ASR n 算术右移n位(1≤n ≤32) LSL n 逻辑左移n位(1≤n ≤31) LSR n 逻辑右移n位(1≤n ≤32) ROR n 循环右移n位(1≤n ≤31) RRX 带扩展的循环右移1位 type Rs 其中:type:ARS、LSL、LSR和ROR的一种。 Rs:提供移位量的寄存器,仅使用最低 有效字节 在指令中移位操作的结果用做Operand2,但Rm本身不变 RRX: 灵活的第二操作数 C S=1
灵活的第二操作数 例子: ADD R3,R7,#1020: 0x3FC AND R0,R5,R2 SUB R11,R12,R3,ASR#5 MOVS R4,R4,LSR #32 ADD R3,R7,#1023: 0x3FF X SUB R11,R12,R3,LSL#32 MOVS R4,R4,RRX #3 ×
• 例子: ADD R3,R7,#1020; 0x3FC AND R0,R5,R2 SUB R11,R12,R3,ASR #5 MOVS R4,R4,LSR #32 ADD R3,R7,#1023; 0x3FF × SUB R11,R12,R3,LSL #32 × MOVS R4,R4,RRX #3 × 灵活的第二操作数