ARMv8-A相關(guān)歷史文章:
- 1. Fundamentals of ARMv8-A
- 2. Execute states
- 3. Changing Exception Levels
- 4. Changing Execution state
- 5. Registers
- 6. Processor state
- 7. The Saved Process Status Register
- 8. System Registers
- 9. The System Control Register
- 10. Changing Executing State (registers)
- 11. Register at AArch32
- 12. A64 instructions
A64指令集和A32指令集類似,都是32bit寬,并且有類似的語法。指令集使用ARMv8-A體系結(jié)構(gòu)中的通用命名約定,以前的32-bit指令集命名如下:
- A32,在AArch32執(zhí)行狀態(tài)下,A32與ARMv7-A在很大程度上都是兼容的,不過還是存在一些差異。A32也提供了一些新的指令來與A64指令集中的某些特性來對(duì)齊。
- T32,Thumb指令集最早在ARM7TDMI處理器中被引入,只包含16-bit指令。16-bit指令集在犧牲一些性能的成本下可以提供很小的代碼。ARMv7-A處理器中,包括Contex-A系列,支持Thumb-2技術(shù),Thumb-2擴(kuò)展了Thumb指令集,提供了16-bit和32-bit的混合指令。這個(gè)可以在保持小的代碼尺寸下,提供與A32指令集相當(dāng)?shù)男阅堋U驗(yàn)樗拇笮『托阅軆?yōu)勢(shì),越來越多的32-bit代碼都開始利用Thumb-32的技術(shù)。
所有的A64指令都是相同的長(zhǎng)度,不像T32是可變長(zhǎng)的指令集。這個(gè)可以使管理和跟蹤生成的代碼序列更容易,尤其在動(dòng)態(tài)代碼生成器上。
13.1 Switching between instruction sets
在單個(gè)應(yīng)用程序中不可能使用來自兩種執(zhí)行狀態(tài)的代碼,在A64和A32或T32指令集中,沒有交互操作。
以A64編寫的代碼不能在ARMv7-A系列處理器中運(yùn)行,而為ARMv7-A處理器編寫的程序可以在ARMv8-A處理器中的AArch32狀態(tài)下運(yùn)行:

13.2 Addressing
當(dāng)處理器能使用單個(gè)寄存器來保存64-bit的值時(shí),在程序中訪問大內(nèi)存就變得簡(jiǎn)單了。32-bit的程序訪問的地址范圍限制在4G,大部分的可尋址空間都被保留給了操作系統(tǒng)內(nèi)核、庫、外設(shè)等,空間不足意味著程序在執(zhí)行時(shí)可能需要映射內(nèi)存中的一些數(shù)據(jù)。使用64-bit的指針,有較大的地址空間,可以避免這個(gè)問題,同時(shí)也使內(nèi)存映射文件技術(shù)的使用變得更方便,也更具有吸引力。即使物理RAM可能不夠大來包含整個(gè)文件,文件的內(nèi)容可以被映射到內(nèi)存空間中。