ARM汇编
http://infocenter.arm.com/help/basic/help.jsp?topic=/com.arm.doc.dui0204ic/Cjafgdih.html
|
对于这条指令伪代码的解释,大体是这样的:
1 2 3 4 5 6 7 8 9 10 11 |
|
#同理ldmfd与之相反。
#x86 w 2;l 4; q 8
andeq r0, r0, r4, ror #20
eq 是条件码,等于的意思,基于 Z 标志。
ror 是操作码,循环右移的意思, ror #20 意思是:循环右移20位
andeq r0, r0, r4, ror #20 的意思是:
若为0(Z=1) 则: r4 循环右移20位(但不改变r4值),然后 r0 & r4 。最后 r0 = r0 & r4
也就是:
if (zero) {
tmp = r4 >> 20; (循环)
r0 = r0 & tmp;
}
BEQ 相等则跳转,B跳转,EQ相等(,前面有CMP)
LDRCC 小于则装载内存数据到寄存器,LDR装载,CC小于
STRCC BCC类似
<助记符>{<执行条件>}{S} <Rd>,<Rn>{,第2操作数}
有S则表示影响CPSR寄存器的值
条件码助记符:
EQ 相等 //结果为零,此时zero=1
NE 不相等 //结果为1,zero=0
CS/HS 无符号数大于或等于
CC/LO 无符号数小于
MI 负数
PL 正数或零
VS 溢出
VC 没有溢出
HI 无符号数大于
LS 无符号数小于或等于
GE 有符号数大于或等于
LT 有符号数小于
GT 有符号数大于
LE 有符号数小于或等于
AL 无条件执行,跟不写一样
ARM 64汇编
sbfiz x1, x1, #5, #32
这条指令最后是将X1 乘以0x20;即数组action偏移X1个的成员地址。这里为什么有个#5不太明白