iPhone手机使用的是ARM汇编,不同的设备CPU的架构也是不相同的。
armv6: iPhone, iPhone2, iPhone3G, 第一代、第二代 iPod Touch
armv7: iPhone3GS, iPhone4, iPhone4S,iPad, iPad2, iPad3(The New iPad), iPad mini, iPod Touch 3G, iPod Touch4
armv7s: iPhone5, iPhone5C, iPad4(iPad with Retina Display)
arm64: iPhone5S 及以后版本.
arm64 经常用到的汇编指令:
MOV X1,X0 ;将寄存器X0的值传送到寄存器X1`
ADD X0,X1,X2 ;寄存器X1和X2的值相加后传送到X0
SUB X0,X1,X2 ;寄存器X1和X2的值相减后传送到X0
AND X0,X0,#0xF ; X0的值与0xF相位与后的值传送到X0
ORR X0,X0,#9 ; X0的值与9相位或后的值传送到X0
EOR X0,X0,#0xF ; X0的值与0xF相异或后的值传送到X0
LDR X5,[X6,#0x08] ;X6寄存器加0x08的和的地址值内的数据传送到X5
STR X0, [SP,#0x8] ;X0寄存器的数据传送到SP+0x8地址值指向的存储空间
STP x29, x30, [sp,#0x10] ;入栈指令
LDP x29, x30, [sp,#0x10] ;出栈指令
CBZ ;比较(Compare),如果结果为零(Zero)就转移(只能跳到后面的指令)
CBNZ ;比较,如果结果非零(Non Zero)就转移(只能跳到后面的指令)
CMP;比较指令,相当于SUBS,影响程序状态寄存器CPSR
B/BL ;绝对跳转#imm, 返回地址保存到LR(X30)
RET ;子程序返回指令,返回地址默认保存在LR(X30)
<void doWhileSomeThing(int aa){
do {
aa=aa+aa;
printf("doWhileSomeThingdoWhileSomeThingdoWhileSomeThing");
} while (aa<100);
}>
<pre>
<code> </code>
</pre>
int doSwiftSome(int a){
switch (a) {
case 1:
{
printf("switch1111111111");
}
break;
case 2:
{
printf("switch22222222");
}
break;
case 3:
{
printf("switch333333333");
}
break;
default:
printf("switchdefaultdefaultdefaultdefault");
break;
};
return 0;ModelTestViewController
}
网友评论