最近三个月的时间,都在进行解码库的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位的处理器。

寄存器差异

4.1 ARM通用寄存器

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

4.2 NEON寄存器

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

32位下 NEON寄存器:

包括:

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

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

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

使用注意:

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

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

2、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的低半部分 。

32位系统和64位系统有什么区别

32位系统和64位系统的区别:

一、CPU要求不同

1、32位和64位表示CPU一次能处理的最大位数;

2、32位CPU只能安装32位系统,64位CPU可以安装32位和64位系统;

二、寻址能力

1、32位系统的最大寻址空间是2的32次方=4294967296(bit)= 4(GB)左右;

2、64位系统的最大寻址空间为2的64次方=4294967296(bit)的32次方,数值大于1亿GB;

3、也就是说32位系统的处理器最大只支持到4G内存,而64位系统最大支持的内存高达亿位数,实际使用过程中大多数的电脑32位系统最多识别3.5GB内存,64位系统最多识别128GB内存。

三、软件兼容性

1、大部分软件都是基于32位架构环境下开发,64位系统的兼容性不如32位;

2、32位系统无法运行64位软件,64位系统可以安装多数32位软件,64位系统下32位软件安装文件夹带x86区分。

四、运算速度不同

64位CPU的指令集可以运行64位数据指令,比32位CPU提高了一倍(需要64位软件支持)。

五、系统体积大小

1、64位操作系统包含32位系统兼容库,既兼容64位又兼容32位的应用程序;

2、64位系统都比32位系统大的多,比如win7 64位比win7 32位系统大700M左右。

如果CPU是32位,那么只能安装32位系统,如果CPU是64位,则可以安装32位或64位,除此以外还需看内存的大小,内存4G以下建议32位,因为32位系统最多识别3.5G内存,4G及以上内存建议64位系统。

六、软件普及不同

目前,64位常用软件比32位常用软件,要少得多的多。道理很简单:使用64位操作系统的用户相对较少。因此,软件开发商必须考虑“投入产出比”,将有限资金投入到更多使用群体的软件之中。这也是为什么64位软件价格相对昂贵的重要原因(将成本摊入较少的发售之中)。

扩展资料:

32位系统和64位系统安装注意事项:

1、64位电脑虽然可以安装32位操作系统,但是32位电脑绝对不能安装64位操作系统。这点至关重要务必牢记,以避免盲目下载和安装。

2、在64位电脑运行的32位操作系统上,不能采取硬盘安装方式安装64位操作系统。如若安装,首选光盘格式化安装方式,也可采用比较繁琐的DOS安装方式。

3、使用虚拟机安装操作系统,实际上就是在目前运行的操作系统上安装软件。因此,在32位操作系统上不能虚拟安装64位操作系统。即便采取“曲线”方式勉强安装,其实已经脱离了底层设备的支持,是毫无疑义的。

4、内存4GB以下还是配32位系统,硬是要装64位也是带不动的。如果内存有4GB或以上,则可以配64位系统。因为如果还装32位操作系统,那么安装再大的内存条,电脑也只能识别3G多一些。

5、安装64位操作系统,再增加内存也可以识别到。比如本来4G内存,想再加装4G内存条,电脑就可以识别7G多的内存,而32位永远是3G多。

32位和64位的区别

32位和64位的区别如下:

1、设计初衷不同。64位操作系统的设计初衷是:满足机械设计和分析、三维动画、视频编辑和创作,以及科学计算和高性能计算应用程序等领域中需要大量内存和浮点性能的客户需求。换句简明的话说就是:它们是高科技人员使用本行业特殊软件的运行平台。而32位操作系统是为普通用户设计的。

2、要求配置不同。64位操作系统只能安装在64位电脑上(CPU必须是64位的)。同时需要安装64位常用软件以发挥64位(x64)的最佳性能。32位操作系统则可以安装在32位(32位CPU)或64位(64位CPU)电脑上。当然,32位操作系统安装在64位电脑上,其硬件恰似“大马拉小车”:64位效能就会大打折扣。

3、运算速度不同。64位CPU GPRs(General-Purpose Registers,通用寄存器)的数据宽度为64位,64位指令集可以运行64位数据指令,也就是说处理器一次可提取64位数据(只要两个指令,一次提取8个字节的数据),比32位(需要四个指令,一次提取4个字节的数据)提高了一倍,理论上性能会相应提升1倍。

4、寻址能力不同。64位处理器的优势还体现在系统对内存的控制上。由于地址使用的是特殊的整数,因此一个ALU(算术逻辑运算器)和寄存器可以处理更大的整数,也就是更大的地址。比如,Windows Vista x64 Edition支持多达128 GB的内存和多达16 TB的虚拟内存,而32位CPU和操作系统最大只可支持4G内存。

5、软件普及不同。目前,64位常用软件比32位常用软件,要少得多的多。道理很简单:使用64位操作系统的用户相对较少。因此,软件开发商必须考虑“投入产出比”,将有限资金投入到更多使用群体的软件之中。这也是为什么64位软件价格相对昂贵的重要原因。