【方輝專欄】ARM64體系結(jié)構(gòu)編程與實(shí)踐學(xué)習(xí)筆記(二) Armv8寄存器
2022-07-20
摘要: 本文主要介紹了Armv8寄存器都有哪些。關(guān)鍵字:ARM64、Armv8、體系結(jié)構(gòu)、ARM架構(gòu)、通用寄存器、特殊寄存器 1. 通用寄存器AArch64 執(zhí)行狀態(tài)支持31個(gè)64位的通用寄存器,分別是X0-X30;如果使用Xn(如X0,X1,X2...)表示64位寄存器,如果使用Wn(如W0,W1,W2...)表示Xn寄存器的低32位數(shù)據(jù)。AArch32 執(zhí)行狀態(tài)支持16個(gè)32位的通用寄存器。通用寄存器在函數(shù)調(diào)用過程中起到特殊作用。在ARM64體系結(jié)構(gòu)的過程調(diào)用標(biāo)準(zhǔn)(Procedure Call Standard,PCS)中進(jìn)行了規(guī)定。PCS 定義哪些寄存器可以被破壞,哪些寄存器不能被破壞。如果寄存器可能損壞,則調(diào)用的函數(shù)可以覆蓋而無需恢復(fù),具體規(guī)則如下表所示:例如一個(gè)函數(shù)foo(),被main()調(diào)用函數(shù)foo()可以使用的寄存器,且不需要保存的寄存器是X0-X15,但如果foo()要使用X19-X28必須先將其保存到堆棧中,然后在返回之前從堆棧中恢復(fù)。XR(X8)寄存器,是一個(gè)間接結(jié)果寄存器。如果返回一個(gè)結(jié)構(gòu)體,那么foo()中結(jié)構(gòu)體的內(nèi)存將又調(diào)用者分配,指向調(diào)用者分配的用于返回結(jié)構(gòu)體的內(nèi)存指針。IP0-IP1這些寄存器是過程調(diào)用中可以被破壞的寄存器,這些寄存器在函數(shù)被調(diào)用和執(zhí)行調(diào)用函數(shù)第一條指令之間這段時(shí)間被破壞。鏈接器使用這些寄存器在調(diào)用者和被調(diào)用者之間插入膠合代碼。最常見使用膠合代碼的例子是A64的分支指令如果目標(biāo)超出范圍,則鏈接器需要生成一個(gè)膠合代碼來擴(kuò)展分支的范圍。FP(X29)幀指針。LR(X30)函數(shù)調(diào)用鏈接寄存器。1. 處理器狀態(tài)AArch64體系結(jié)構(gòu)使用PSTAE(Processor state)寄存器來表示當(dāng)前處理器狀態(tài)。2.1數(shù)據(jù)處理標(biāo)志位N:負(fù)數(shù)標(biāo)志位,一個(gè)二進(jìn)制補(bǔ)碼,結(jié)果為負(fù)數(shù)則N=1;否則N=0;Z:零標(biāo)志位,如果結(jié)果為零,則Z=1;否則Z=0;C:進(jìn)位標(biāo)志位,如果結(jié)果有進(jìn)位,則C=1;否則C=0;V:溢出標(biāo)志位,如果結(jié)果有溢出,則V=1;否則V=0;2.2異常掩碼標(biāo)志位D:調(diào)試異常掩碼位。A:系統(tǒng)錯(cuò)誤屏蔽位。I:IRQ屏蔽位。 F:FIQ屏蔽位。以上標(biāo)志位,當(dāng)為0是表示不屏蔽這個(gè)異常,當(dāng)為1時(shí)表示屏蔽這個(gè)異常。2.3運(yùn)行狀態(tài)SS:軟件單步。該位為1,表示在異常處理時(shí)使能了軟件單步功能。IL:非法執(zhí)行狀態(tài)位。EL:當(dāng)前異常等級(jí)。0:表示EL0;1:表示EL1;2:表示EL2;3:表示EL3;nRW:當(dāng)前執(zhí)行狀態(tài)。0:表示AArch64;1:表示AArch32;SP:堆棧指針選擇寄存器。0:表示選擇SP0;1:表示SPx;2. 特殊寄存器3.1 零寄存器零寄存器顧名思義,這些寄存器的內(nèi)容全是0,可以用做源寄存器,也可以用作目標(biāo)寄存器。WZR是32位的零寄存器,XZR是64位的零寄存器。3.2 PC(Program Counter)程序指針寄存器PC指針寄存器通常用來指向當(dāng)前運(yùn)行指令的下一條指令的地址,用于控制程序中指令的運(yùn)行順序,但編程人員不能通過指令來直接訪問。3.3 SP(Stack Pointer)堆棧指針寄存器Armv8體系結(jié)構(gòu)支持4個(gè)異常等級(jí),每個(gè)等級(jí)都有一個(gè)專門的SP寄存器SP_ELn.SP_EL0: EL0 下的棧指針寄存器SP_EL1: EL1 下的棧指針寄存器SP_EL2: EL2 下的棧指針寄存器SP_EL3: EL3 下的棧指針寄存器3.4 SPSR(Saved Program Status Register)備份程序狀態(tài)寄存器當(dāng)我們運(yùn)行一個(gè)異常處理程序時(shí),處理器會(huì)把PSTATE寄存器的值暫時(shí)保存在備份程序狀態(tài)寄存器(SPSR)里,當(dāng)異常處理完成并返回時(shí),再把SPSR的值恢復(fù)到PSTATE寄存器。3.5 ELR(Exception Link Register)異常鏈接寄存器ELR用于存放異常返回地址。3. 系統(tǒng)寄存器系統(tǒng)寄存器用于配置處理器和控制系統(tǒng),例如MMU和異常處理。數(shù)據(jù)處理或加載/存儲(chǔ)指令不能直接使用系統(tǒng)寄存器。需要將系統(tǒng)寄存器的內(nèi)容讀入X寄存器,對(duì)其進(jìn)行操作,然后再寫回系統(tǒng)寄存器。+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++關(guān)于億道電子億道電子技術(shù)有限公司(英文名稱:Emdoor Electronics Technology Co.,Ltd)是國內(nèi)資深的研發(fā)工具軟件提供商,公司成立于 2002 年,面向中國廣大的制造業(yè)客戶提供研發(fā)、設(shè)計(jì)、管理過程中使用的各種軟件開發(fā)工具,致力于幫助客戶提高研發(fā)管理效率、縮短產(chǎn)品設(shè)計(jì)周期,提升產(chǎn)品可靠性。20 年來,先后與 Altium、ARM、Ansys、QT、Adobe、Visu-IT、Minitab、Testplant、EPLAN、HighTec、GreenHills、PLS、Ashling、MSC Software 、Autodesk、Source Insight、TeamEDA、MicroFocus等多家全球知名公司建立戰(zhàn)略合作伙伴關(guān)系,并作為他們?cè)谥袊鴧^(qū)的主要分銷合作伙伴服務(wù)了數(shù)千家中國本土客戶,為客戶提供從芯片級(jí)開發(fā)工具、EDA 設(shè)計(jì)工具、軟件編譯以及測(cè)試工具、結(jié)構(gòu)設(shè)計(jì)工具、仿真工具、電氣設(shè)計(jì)工具、以及嵌入式 GUI 工具等等。億道電子憑借多年的經(jīng)驗(yàn)積累,真正的幫助客戶實(shí)現(xiàn)了讓研發(fā)更簡單、更可靠、更高效的目標(biāo)。歡迎關(guān)注“億道電子”公眾號(hào)了解更多研發(fā)工具軟件知識(shí)
查看更多→