1. 首页 > 经验  > 正文

arm32和64的区别

最近三个月时间都在进行解码库的arm架构汇编优化包括arm32位汇编优化和arm64位汇编优化。在arm32位入门之后,只要掌握了两种架构的寄存器和指令差异之后,就可以很快上手编写arm64位汇编代码了。下面就arm32位和arm64位架构、寄存器和指令差异进行分析总结。

架构差异

ARM是RISC(精简指令集)处理器,不同于x86指令集(CISC,复杂指令集)。

Arm32位是ARMV7架构,32位的,对应处理器为Cortex-A15等; iphone5以前均是32位的;

注意:ARMV7-A和ARMV7-R系列支持neon指令集,ARMv7-M系列不支持neon指令集。

ARM64位采用ARMv8架构,64位操作长度,对应处理器有Cortex-A53、Cortex-A57、Cortex-A73、iphones的A7和A8等,苹果手机从iphone 5s开始使用64位的处理器。

寄存器差异

04

1 ARM通用寄存器

ARM32位通用寄存器和ARM64位通用寄存器差异详见:ARM寄存器及其说明

04

2 NEON寄存器

ARM32位neon寄存器和ARM64位neon寄存器差异:

32位下 NEON寄存器:

包括:

32个S寄存器,S0~S31,(单字,32bit)

32个D寄存器,D0~D31,(双字,64bit)

16个Q寄存器,Q0~Q15,(四字,128bit)

使用注意:

01

NEON寄存器将每个寄存器均视为一个向量,该向量又包含1,2,4,8或16个大小类型均相同的元素也可以将各个元素当做标量访问。

NEON的这三种寄存器是重叠的,物理地址是一样的

02

NEON寄存器在使用时,如果用到d8~d15寄存器,需要先入栈保存vpush {d8-d15},使用完之后要出栈vpop {d8-d15}。

64位下NEON寄存器:

包括:

32个B寄存器(B0~B31),8bit

32个H寄存器(H0~H31),半字 16bit

32个S寄存器(S0~S31) ,单字 32bit

32个D寄存器(D0~D31),双字 64bit

32个Q寄存器(V0~V31),四字 128bit

不同位数下寄存器之间关系如下图所示:

其中S0是D0的低半部分,D0是V0的低半部分 。

arm32和64的<a href=/tag/qubie.htm target=_blank class=infotextkey><a href=http://www.zzww.net/tag/qubie.htm target=_blank class=infotextkey>区别</a></a>

本文由'介恩希'发布,不代表演示站立场,转载/删除联系作者,如需删除请-> 关于侵权处理说明