当前位置:文档之家› 汇编语言-内容回顾(1)

汇编语言-内容回顾(1)


北京大学软件与微电子学院
2006.2
汇编语言-ARM Instruction Set (4)
1.通用数据处理指令 (续)
算术运算 (续)
SUB和SBC
语法 Op{cond}{s} Rd, Rn, Operand2 标志位 N, Z, C,V 例 ;C=1 MOV r0,#20 MOV r1, #5 SUB r0, r0, r1 SUBC r0, r0, r1
北京大学软件与微电子学院
2006.2
汇编语言-ARM Instruction Set (3)
2.存储器访问(续)
LDR和STR(续)
双字
语法 op{cond}D Rd, [Rn] op{cond}D Rd, [Rn, Offset]{!} op{cond}D Rd, label op{cond}D Rd, [Rn], Offset
北京大学软件与微电子学院
2006.2
汇编语言-ARM Instru续)
双字
例 正确 LDRD r6,[r11] LDRMID r4,[r7],r2 STRD r4,[r9,#24] STRD r0,[r9,-r2]! LDREQD r8,abc4 错误 LDRD r1,[r6] ; Rd 必须为偶数 STRD r14,[r9,#36] ; Rd 不能是R14. STRD r2,[r3],r6 ; Rn 不能是 Rd 或 R(d+1).
汇编语言-ARM Instruction Set (2)
2.存储器访问(续)
LDR和STR(续)
半字和符号字节访问
语法 op{cond} type Rd, [Rn](0 偏移) op{cond} type Rd, [Rn, Offset]{!}(先偏移) op{cond} type Rd, label(程序相对) op{cond} type Rd, [Rn], Offset(后偏移,改变 Rn中的值) type SH(Signed Half Word), H (Half Word), SB(Signed Byte)
北京大学软件与微电子学院
2006.2
汇编语言-ARM Instruction Set (1)
2.存储器访问
LDR和STR
字和无符号字节访问
语法 op{cond}{B}{T} Rd, [Rn] (0 偏移) op{cond}{B} Rd, [Rn, FOffset]{!} (先偏移) op{cond}{B} Rd, label (程序相对) op{cond}{B}{T} Rd, [Rn], FOffset (后偏移) 标志位 N, Z, C 例 LDR r8,[r10] LDRNE r2,[r5,#960]! STR r2,[r9,#consta-struc] STRB r0,[r3,-r8, ASR #2] STR r5,[r7],#-8 LDR r0,localdata 北京大学软件与微电子学院 2006.2
北京大学软件与微电子学院
2006.2
汇编语言-ARM Instruction Set (6)
1.通用数据处理指令 (续)
逻辑运算
AND, ORR, EOR, BIC
语法
Op{cond}{s} Rd, Rn, Operand2 标志位 N, Z, C 例 正确 AND r9,r2,#0xFF00 ORREQ r2,r0,r5 EORS r0,r0,r3,ROR r6 BICNES r8,r10,r0,RRX 错误 EORS r0,r15,r3,ROR r6
北京大学软件与微电子学院
2006.2
汇编语言-ARM Instruction Set (1)
3.跳转
B和BL
语法 B{cond} label BL{cond} label BL执行
PC+1 ->r14 Branch to label
范围 ±32MB 例 B loopA BLE ng+8 BL subC BLLT rtX
北京大学软件与微电子学院
2006.2
汇编语言-ARM Instruction Set (2)
3.跳转
BX和BLX
语法 BX{cond} Rm BLX{cond} Rm BLX label 例子 正确 BX r7 BXVS r0 BLX r2 BLXNE r0 BLX thumbsub 错误 BLXMI thumbsub (?) BLX label cannot北京大学软件与微电子学院 be conditional
北京大学软件与微电子学院
2006.2
汇编语言-ARM Instruction Set (10)
1.通用数据处理指令 (续)
计算先导零的数目
CLZ
语法 CLZ{cond} Rd, Rm 标志位 不影响 例 MOV r9, #800 CLZ r4,r9 CLZNE r2,r9 注意:只有V5以上的版本有该指令
北京大学软件与微电子学院 2006.2 Memory system 管理Cache,这条指令有什么作用? 加速!
汇编语言-ARM Instruction Set (6)
2.存储器访问(续)
SWP (Swap data between registers and memory)
语法 SWP{cond}{B} Rd, Rm, [Rn] 执行 [Rn]->Rd Rm->[Rn] 例 MOV r1,#0x48 LDR r2, =0x55555 MOV r0, #0x300 SWP r0,r1,[r2] LTORG
(Rn-Operand2)
北京大学软件与微电子学院
2006.2
汇编语言-ARM Instruction Set (5)
1.通用数据处理指令 (续)
算术运算 (续)
RSB和RSC
语法 Op{cond}{s} Rd, Rn, Operand2 标志位 N, Z, C,V 例 ;C=1 MOV r0,#20 MOV r1, #5 RSB r0, r0, #6 RSC r0, r0, r1 注意:相减的方向相反 Operand2-Rn
北京大学软件与微电子学院
2006.2
汇编语言-ARM Instruction Set (5)
2.存储器访问(续)
LDM和STM(续) (已讲) PLD-(Cache preload)
语法 PLD [Rn{, FOffset}] 例 PLD [r2] PLD [r15, #280] PLD [r9, #-2481] PLD [r0, #av*4] PLD [r0, r2] PLD [r5, r8, LSL #2] 注:该指令在V5E以上有效
汇编语言-ARM Instruction Set (9)
1.通用数据处理指令 (续)
数据测试
TST和TEQ
语法 TST{cond} Rn, Operand (Rn AND Operand) TEQ{cond} Rn, Operand (Rn EOR Operand) 注意:Rn而不是Rd 标志位 N, Z, C 例 TST r0,#0x3F8 TEQEQ r10,r9 TSTNE r1,r5,ASR r1
注意: 用Offset (#expr和{-}Rm)而不是Foffset r15中不能装入16bits的数
北京大学软件与微电子学院
2006.2
汇编语言-ARM Instruction Set (3)
2.存储器访问(续)
LDR和STR(续) 半字和符号字节访问 例 正确 LDREQSH r11, [r6] LDRH r1, [r0, #22] STRH r4, [r0, r1]! LDRSB r6, constf 错误 LDRSB r1, [r6], r3, LSL#4.
北京大学软件与微电子学院
2006.2
汇编语言-ARM Instruction Set (1)
1.通用数据处理指令
移位(操作码的一部分)
操作类型 ASR n 算术右移, 1<= n <=32 (不改变符号位) LSL n 和 LSR n 逻辑移位 (补零) LSL:0<= n <=31;LSR:1<=n<=32 ROR n 和 ROL n 循环移位 (从一端移出并从另一端移进) RRX (移位一次) 向右循环移位
2006.2
汇编语言-ARM Instruction Set (1)
4.乘法指令
MUL和MLA (32bit *32bit -> least 32bit) 语法 MUL{cond}{S} Rd, Rm, Rs MLA{cond}{S} Rd, Rm, Rs, Rn 执行 MUL: Rs*Rm ->Rd (least) MLA: Rs*Rm+Rn -> Rd (least) 标志位 N, Z
注:在有寄存器控制移位的情况下,R15不用作Rd或任何操作数
北京大学软件与微电子学院
2006.2
汇编语言-ARM Instruction Set (7)
1.通用数据处理指令 (续)
MOV和MVN
语法 MOV{cond}{S} Rd, Operand MVN{cond}{S} Rd, Operand 标志位 N, Z, C 例 正确 MOV r5,r2 MVNNE r11,#0xF000000B MOVS r0,r0,ASR r3 错误 MOV R5,#0X123 MVN r15,r3,ASR r0
北京大学软件与微电子学院
2006.2
汇编语言-ARM Instruction Set (2)
4.乘法指令
MUL和MLA (32bit *32bit -> least 32bit) 例子 正确 MUL r10,r2,r5 MLA r10,r2,r1,r5 MULS r0,r2,r2 MULLT r2,r3,r2 错误 MUL r15,r0,r3 ; use of r15 not allowed MLA r1,r1,r3, r6 ;Rd cannot be the same as Rm
相关主题