裝配臂的這條線是做什麼的?給定的線在臂組裝中做了什麼以及每個變量的目的是什麼?
mrc p15, 0, %0, c9, c13, 0" : : "r" (counter)
誰是p15
是不是應該r15
什麼都是別人呢?
什麼是::
誰是c9, c1
每個參數的作用是什麼?
裝配臂的這條線是做什麼的?給定的線在臂組裝中做了什麼以及每個變量的目的是什麼?
mrc p15, 0, %0, c9, c13, 0" : : "r" (counter)
誰是p15
是不是應該r15
什麼都是別人呢?
什麼是::
誰是c9, c1
每個參數的作用是什麼?
MRC
雖然是一個通用協處理器-OP間指令,cp15
是控制處理器 - 其中所有現代的ARM CPU具有和這已被用於由ARM被延伸的指令集的裝置用於片上單元,如高速緩存,MMU,性能監控等等。
以你的指令位在一個時間:
mrc p15, 0, %0, c9, c13, 0" : : "r" (counter)
根據該指令格式爲ARM Cortex A7 MPCore Reference:
MRC{cond} P15, <Opcode_1>, <Rd>, <CRn>, <CRm>, <Opcode_2>
而且對第4-11頁此被描述爲一個CPU寄存器傳輸到性能監視器計數寄存器(我猜count=0
,這是性能計數器的重置)。
至於內聯彙編程序的語法。有關x86概述,請參閱this - 這可能與ARM類似。
的: : "r" (counter)
意味着指令具有:
counter
注意到輸入到結束,並且寄存器這在應使用作爲%0
。什麼'
手臂中的協處理器可能比其他處理器更明顯。儘管如此,這是一個協處理器訪問函數,協處理器接口是通用的,這些指令是通用的,就好像您只是在通用總線上填充項目一樣。現在arm可以重複使用,因爲一個內核中的協處理器寄存器如果存在於另一個內核中更有可能是不相關或相同的。正確的答案是進入arm網站(infocenter.arm.com),並找到您正在使用的處理器系列和核心的代碼,或者查找代碼中的arm arm(arm架構參考手冊)和trm(技術參考手冊)因爲在一個或兩個手冊中,它將有一個關於協處理器的部分,當您進入該部分時,您將看到協處理器號碼,然後在該協處理器中註冊,並且其中一些數字將有意義。 ARM通常會說,在這裏讀取這個寄存器是一個確切的指令,在這裏寫這個寄存器就是確切的指令,並且它將採用你提供的形式。如果你正在尋找從代碼向後倒退的方式,你會發現你可以很快地進入手冊的那一部分,並快速找到該指令,然後看看它爲特定的核心或家族做了什麼。另一種方法是查看章節標題,找到感興趣的寄存器,然後查看用於操作它的指令的語法。
至於::雙冒號,我猜你從內聯程序集中獲得了這個內聯程序集,這與內聯程序集有關,這是一個編譯器,與arm指令無關,arm指令以C13,0
這是GCC風格的內聯彙編 - 如果你想有一個完整的解釋你應該張貼周圍的代碼了。 –