ARM アセンブリのこの行は何をしますか?
mrc p15, 0, %0, c9, c13, 0" : : "r" (counter)
とはp15
? 通常、レジスタにはr
in などのプレフィックスが付けられr15
ます。
記号::
と役割は何c9, c1
ですか?
ARM アセンブリのこの行は何をしますか?
mrc p15, 0, %0, c9, c13, 0" : : "r" (counter)
とはp15
? 通常、レジスタにはr
in などのプレフィックスが付けられr15
ます。
記号::
と役割は何c9, c1
ですか?
は一般的なコMRC
プロセッサ相互運用命令 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 の概要については、これを参照してください。おそらく ARM に似ています。
: : "r" (counter)
命令が持つ手段:
counter
これが入っているレジスタは として使用する必要があります%0
。アーム内のコプロセッサーは、おそらく他のプロセッサーよりも明白/目に見えるものです。ただし、これはコプロセッサ アクセス関数であり、コプロセッサ インターフェイスはジェネリックです。これらの命令は、あたかもジェネリック バスに項目を入力しているかのようにジェネリックです。現在、アームは、あるコアのコプロセッサレジスタが別のコアに存在する場合、関連がないか同じである可能性が高いという点で、物事を再利用します。正しい答えは、arm の Web サイト (infocenter.arm.com) にアクセスして、使用している、またはコードを調べているプロセッサのファミリとコアの arm arm (arm アーキテクチャ リファレンス マニュアル) と trm (テクニカル リファレンス マニュアル) の両方を見つけることです。というのも、一方または両方のマニュアルにコプロセッサーに関するセクションがあり、そのセクションに進むと、コプロセッサー番号が表示され、そのコプロセッサー内に登録され、いくつかの番号が意味をなすからです。ARMは一般に、ここでこのレジスタを読み取ることは正確な命令であり、このレジスタをここに書き込むことは正確な命令であり、提示されたとおりの形式をとると言います。コードからその機能までさかのぼって見ている場合は、マニュアルのそのセクションにすばやく進み、指示をすばやく見つけて、その特定のコアまたはファミリで何をするかを確認できることがわかります。逆に、章とセクションのタイトルを調べて、目的のレジスタを見つけてから、それを操作するために使用される命令の構文を見つけます。コードからその機能までさかのぼって見ている場合は、マニュアルのそのセクションにすばやく進み、指示をすばやく見つけて、その特定のコアまたはファミリで何をするかを確認できることがわかります。逆に、章とセクションのタイトルを調べて、目的のレジスタを見つけてから、それを操作するために使用される命令の構文を見つけます。コードからその機能までさかのぼって見ている場合は、マニュアルのそのセクションにすばやく進み、指示をすばやく見つけて、その特定のコアまたはファミリで何をするかを確認できることがわかります。逆に、章とセクションのタイトルを調べて、目的のレジスタを見つけてから、それを操作するために使用される命令の構文を見つけます。
:: 二重コロンに関する限り、インラインアセンブリからこれを取得したと推測しています。これはインラインアセンブリに関連しており、コンパイラのことであり、arm 命令にはまったく関連していません。arm 命令は c13, 0 で終わります。