我在學習ARMv8例外處理的時候看到了下面這句話:
從 AArch32 到 AArch64 的例外處理時,有一些特殊的注意事項。AArch64 處理程式代碼可能需要訪問 AArch32 暫存器,因此架構定義了映射以允許訪問 AArch32 暫存器。
還有銀行地圖: 在此處輸入圖片描述
所以我想問:
- 我們何時以及為什么需要在 AArch64 狀態下訪問 AArch32 暫存器?
- 這個映射表對程式員可見嗎?編碼時是否需要寫對應的Wn?還是只是Rn?
uj5u.com熱心網友回復:
一個典型的用例是希望能夠運行 32 位 ARM 應用程式的 64 位作業系統。它將在 EL0 以 AArch32 狀態運行應用程式,而作業系統在 EL1 以 AArch64 狀態運行。
假設 32 位應用程式需要進行系統呼叫。它將在 AArch32 暫存器中設定引數并導致例外svc / swi
。作業系統的例外處理程式以 AArch64 狀態在 EL1 運行,需要能夠檢索這些暫存器的內容以適當地處理系統呼叫。因此,映射告訴它,例如,應用程式寫入的任何內容r1
都將在x1
.
撰寫代碼時,您只需使用您正在撰寫的狀態(AArch32/AArch64)中可用的任何暫存器集。對于 32 位代碼,您撰寫 r0、r1、r2 等,對于 64 位代碼,您使用 w0/x0、w1/x1 等。對于應用程式編程,映射無關緊要,只有當您是撰寫需要在兩種狀態之間進行互動的作業系統代碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/437714.html
上一篇:如何獲取CompletableFuture處理程式之外的例外?
下一篇:如何在Nim中禁用警告