64 vs 32
x86结构
寄存器:64bit比32bit有更多的通用寄存器16个,通用寄存器都是64bit长度的,名称也发生了变化,eax-> rax,增加r8-r15, mmx寄存器位宽是一样的,数目变多了,16个,可以参考http://zh.wikipedia.org/zh-cn/X86#64.E4.BD.8D.E5.85.83
函数调用:64bit已经使用通用寄存器来传递参数,其中windows系统是前面四个参数用,linux系统是前面6个参数,剩下的通过栈来传递,32bit windows和linux所有参数都是通过栈来传递的
指令集:32bit和64bit的指令集是一样的。
arm结构
寄存器:arm64有32个64bit长度的通用寄存器x0~x30,sp,可以只使用其中的32bit w0~w30,arm32只有16个32bit的通用寄存器r0~r12, lr, pc, sp. arm64有32个128bitSIMD寄存器v0~v31,arm32有16个128bitSIMD寄存器Q0~Q15,又可细分为32个64bitSIMD寄存器D0~D31
函数调用:arm64前面8个参数都是通过寄存器来传递x0~x7, arm32前面4个参数通过寄存器来传递r0~r3,其他通过栈传递
指令集:arm64和arm32是两套不同的指令集,尤其是SIMD指令集完全不同。
--aliang童鞋
寄存器:64bit比32bit有更多的通用寄存器16个,通用寄存器都是64bit长度的,名称也发生了变化,eax-> rax,增加r8-r15, mmx寄存器位宽是一样的,数目变多了,16个,可以参考http://zh.wikipedia.org/zh-cn/X86#64.E4.BD.8D.E5.85.83
函数调用:64bit已经使用通用寄存器来传递参数,其中windows系统是前面四个参数用,linux系统是前面6个参数,剩下的通过栈来传递,32bit windows和linux所有参数都是通过栈来传递的
指令集:32bit和64bit的指令集是一样的。
arm结构
寄存器:arm64有32个64bit长度的通用寄存器x0~x30,sp,可以只使用其中的32bit w0~w30,arm32只有16个32bit的通用寄存器r0~r12, lr, pc, sp. arm64有32个128bitSIMD寄存器v0~v31,arm32有16个128bitSIMD寄存器Q0~Q15,又可细分为32个64bitSIMD寄存器D0~D31
函数调用:arm64前面8个参数都是通过寄存器来传递x0~x7, arm32前面4个参数通过寄存器来传递r0~r3,其他通过栈传递
指令集:arm64和arm32是两套不同的指令集,尤其是SIMD指令集完全不同。
--aliang童鞋