ページディレクトリを指すCR3レジスタと似ています。 Linuxもページングを使用し、Cで書かれていますが、これらのレジスタはどのようにCで使用されますか(Cを使用して特定のレジスタを選択する方法)?Cではどのようにレジスタを使用していますか?
答えて
C言語は、特定のプロセッサレジスタにアクセスする手段を提供しません。これはすべてコンパイラによるものです。
特定のレジスタにアクセスするには、少なくともコードのこの部分をアセンブラで記述する必要があります。
私はあなたの答えが質問に答えていない、あなたはコメントとして投稿する必要がありますことを意味します。 –
@MichaelWalz - それは質問に答えます。 OPは純粋なCの範囲で尋ねた。純粋なCはそれを許さない。したがってこれが答えです。短くてもそれを損なうものではありません。 – StoryTeller
@StoryTeller大丈夫、たぶん、私のコメントを削除します。 –
あなたが話しているレジスタは、言語のプロパティではなく、プログラムを実行するハードウェアのプロパティです。私はあなたがx86タイプのハードウェアについて話していると信じています。 cr0-4およびorther特定のregsは、オペレーティングシステムのプロパティであり、ページングテーブルを含む、それによって管理されます。
したがって、これらのhw固有のレジスタにアクセスする方法はありません。唯一の方法は、それらを操作するためのアセンブリコード(ハードウェア固有)を記述することです。言語が提供する唯一のものは、アセンブリコードをプログラムに挿入できるようにするasm()
演算子です。
'__asm__ 'は特定の実装によって提供される*拡張子です。それは標準のC言語定義の一部ではありません。 –
@ JohnBode right、標準のものは 'asm()'です。それを私が直した。 – Serge
'asm'は共通の拡張子としてJ.5.10にリストされていますが、コア言語やライブラリの一部ではありません。 J.5/1で述べているように、「次の拡張は多くのシステムで広く使用されていますが、すべての の実装には移植できません。 –
標準Cは、プロセッサレジスタに直接アクセスする機能を提供しません。いくつかの実装は、アセンブリコードをCコードに埋め込むことができる拡張子を提供します(例えば、gccによって提供されるasm
拡張子)。
一般に、プロセッサレジスタ(または他のハードウェア固有の場所)に直接アクセスする必要がある場合は、そのルーチンをアセンブラに書き込んで大きなプログラムにリンクします。
- 1. C:8086レジスタをシミュレートするにはどうすればよいですか?
- 2. xmlwriterはどのようにobjective cで使用しますか?
- 3. C#のFsCheckカスタムジェネレータはどのように使用しますか?
- 4. ThriftのC#THttpHandlerはどのように使用しますか?
- 5. ppc64leでは分岐レジスタはどのように機能しますか?
- 6. C++ CPUレジスタの使用
- 7. Objective-cの "__block"キーワードはどのように使用されていますか?
- 8. C#を使用してhtmlチェックボックスをどのように評価しますか?
- 9. LinuxでC/C++を使用してDNSルックアップを実行するにはどうすればよいですか?
- 10. SWIGを使用してC++ APIでCラッパーを生成するにはどうすればよいですか?
- 11. llvm-covレポートではどのようにC++ filtを使用しますか?
- 12. C++を使用して.asmx Webサービスを使用するにはどうすればよいですか?
- 13. c#を使用してExcelのドロップダウンリストにオートコンプリートを適用するにはどうすればよいですか?
- 14. この例ではdupをどのように使用していますか?
- 15. Mifare Ultralight C(アンドロイド使用)のセキュリティをどのように使用しますか?
- 16. HaskellではどのようにTypeApplicationsを使用していますか?
- 17. dart 1.0ではどのようにOAuth2を使用していますか?
- 18. プログラムはここでどのようにスタックを使用していますか?
- 19. C++:このようなforループは(ポインタを使用して)どのように機能しますか?
- 20. どのようにしてアンプキャッシュを使用できますか?
- 21. どのようにしてRefersToRangeを使用できますか?
- 22. Emabarcadero C++を使用してCソースコードをコンパイルするにはどうすればよいですか?
- 23. C++を使用してスタートアップ時に新しいウィンドウを開くにはどうすればよいですか?
- 24. C#でGoogle Speech2Textを使用しようとしています
- 25. C/C++ソースコードとライブラリをJavaでどのように使用できますか?
- 26. C#を使用してデータベースにパッチを適用するにはどうすればよいですか?
- 27. C++で "%"演算子はどのように使用しますか?
- 28. レジスタ+スタックベースの仮想マシンはどのように機能しますか?
- 29. どのように使用すると、Cでmemmoveを使用して良いですか?
- 30. ListView.DataSourceはどのように使用されていますか?
レジスタを直接使用する場合は、アセンブリ言語でコーディングする必要があります。 –
どのようにマクロが初期化されるのですか?(私はいくつかのマクロを読み込んでレジスタを選択しています)、linuxのページングのソースコードでアセンブリ言語を見たことがありません。そのコードはどのように機能しますか? –
あなたは何を達成しようとしていますか?通常、C言語ではCPUレジスタを使用する必要はありませんが、C言語ではレジスタのアクセス方法を指定していません。しかし、多くのコンパイラには、CPUレジスタを直接扱うことができる拡張機能があります。 –