讀取暫存器值 ARM訪問實現自定義系統暫存器

2021-10-12 07:50:03 字數 1250 閱讀 1009

armv8中,取消了協處理器,之前協處理器實現的功能,全部由系統暫存器來是實現。對於系統暫存器的訪問,使用mrs,msr指令來訪問。

指令編碼如下:

l: 1, mrs,讀取系統暫存器值到通用暫存器中

l: 0, msr,將通用暫存器值寫入到系統暫存器中

而系統暫存器的編碼,由op1,crn,crm,op2來決定。如下圖所示,更多的系統暫存器的編碼,檢視arm-spec。

比如,我要讀取 osdtrrx_el1 系統暫存器,就可以使用 mrs 指令

mrs x0, osdtrrx_el1

op1,crn,crm,op2的編碼組合有很多,arm並沒有將所有的組合,均定義系統暫存器。對於未使用的編碼組合,arm允許實現自定義這些系統暫存器的功能,比如gic的暫存器。

如下圖,是gic暫存器的編碼組合。

對於這些實現自定義的系統暫存器,在寫匯程式設計序的時候,是不能通過系統暫存器的名字去訪問的,否則編譯會報錯。比如要訪問 ich_hcr_el2,是不能通過以下指令去訪問的。

mrs x0, ich_hcr_el2

為了解決訪問自定義系統暫存器,arm定義了以下格式,來表示系統暫存器。

s__c_c_

訪問實現自定義暫存器,使用上述格式,來表示系統暫存器。

比如,對於上圖中的gic的暫存器ich_hcr_el2,就可以

mrs x0, s3_4_c12_c11_0

為了寫**的方便,可以定義以下巨集:

這樣,在寫**的時候,就可以直接用系統暫存器的名字。

原文首發於:

arm訪問實現自定義系統暫存器 | 駿的世界​www.lujun.org.cn

mysql 訪問暫存器 暫存器 記憶體訪問

一 ds和 address cpu要讀寫乙個記憶體單元的時候,必須先給出這個記憶體單元的位址,在8086pc中記憶體位址有段位址和偏移位址組成。ds 資料暫存器 中通常存放要訪問資料的段位址。比如要讀取1000h單元的內容,可以用下面這段 mov bx,1000h mov ds,bx mov al,...

arm上獲取暫存器的值

本來說在arm上獲取暫存器的值是因為需要除錯乙個很古怪的問題,而在自己的機器上測試的386結構的 似乎還不如arm上對register的訪問自由。大致的想了想似乎arm上得到暫存器的值很簡單的樣子。所以之前才說可能在arm上會比較簡單。結果今天上午一試還是當頭一棒,畢竟還是對arm asm不太熟悉的...

ARM暫存器整理

arm有37個暫存器,31個通用暫存器 r0 r15 32位 和6個狀態暫存器 1.通用暫存器 使用者模式 系統模式 特權模式 中止模式 未定義指令模式 外部中斷模式 快速中斷模式。可分為 未備份暫存器r0 r7 備份暫存器 r8 r14 程式計數器 pc r15 注 r0 r7在所有模式下指的同一...