A64指令集與現(xiàn)有的A32指令集相似。 指令本身仍然是32位寬,并且具有相似的語(yǔ)法。
指令集使用ARMv8-A體系結(jié)構(gòu)中的通用命名約定,所以原始的32位指令集狀態(tài)現(xiàn)在稱作:
A32
當(dāng)處于AArch32狀態(tài)時(shí),指令集在很大程度上與ARMv7-A兼容,雖然有些不同。 它還提供了一些新指令,這些指令和A64指令集中引入的一些特性相匹配。
T32
Thumb指令集首次在ARM7TDMI處理器中引入,最初只包含16位指令。 以一些性能為代價(jià),16位指令提供了更小的程序。 ARMv7-A處理器(包括Cortex-A系列中的處理器)支持Thumb-2技術(shù),該技術(shù)擴(kuò)展了Thumb指令集以提供16位和32位指令的混合。 這使得性能與ARM相似,同時(shí)保留了較小的代碼大小。由于其尺寸和性能優(yōu)勢(shì),所有32位代碼利用Thumb-2技術(shù)進(jìn)行編譯或匯編以的趨勢(shì)越來(lái)越普遍。
按照命名約定,并反映64位操作,AArch64的指令集稱為A64
所有A64指令的長(zhǎng)度都是相同的,不同于T32—它是一個(gè)可變長(zhǎng)度的指令集。 這使的管理和跟蹤生成的代碼序列更容易,特別是對(duì)動(dòng)態(tài)代碼生成器的影響。
在指令集之間切換
在單個(gè)應(yīng)用程序中使用來(lái)自兩個(gè)執(zhí)行狀態(tài)的代碼是不可能的。 在ARMv8-A中A64 和A32/T32指令集之間沒(méi)有像在A32和T32指令集之間有交互工作。 用A64 給ARMv8-A處理器編寫的代碼不能在ARMv7-ACortex?-A系列處理器上運(yùn)行。 但是,為ARMv7-A處理器編寫的代碼可以在AArch32執(zhí)行狀態(tài)下的ARMv8-A處理器上運(yùn)行。 下圖總結(jié)了這一點(diǎn)。

尋址
當(dāng)處理器可以將64位值存儲(chǔ)在單個(gè)寄存器中時(shí),在程序中訪問(wèn)大量?jī)?nèi)存就變得簡(jiǎn)單多了。 在32位硬件核上執(zhí)行的單個(gè)線程只能訪問(wèn)4GB的地址空間。 該可尋址空間的大部分被保留供操作系統(tǒng)內(nèi)核,庫(kù)代碼,外圍設(shè)備等使用。 因此,地址空間不足意味著程序在執(zhí)行時(shí)可能需要將一些數(shù)據(jù)映射進(jìn)或替換出內(nèi)存。 有一個(gè)更大的地址空間—有64位指針,避免了這個(gè)問(wèn)題。 這也使得內(nèi)存映射文件等技術(shù)更具吸引力和更方便使用。 即使物理RAM可能不足以包含整個(gè)文件,文件內(nèi)容也會(huì)映射到線程的內(nèi)存映射中。