1

私は、パフォーマンスをテストするために、asmの小さな部分を組み込みに変換するタスクを与えられてきました。私はどちらのコードも開発したことがありませんが、asmとcを理解し、固有の構文を読んでいます。しかし、組み込みがレジスタへのアクセスをどのように処理しているかについての情報を見つけることができません。私は2つの関数を見つけました:

getReg()およびsetReg()

getReg()には、さまざまなレジスタテーブルとそのID /番号のテーブルが付属しています。-一般整数レジスタ-アプリケーションレジスタ-制御レジスタ-間接レジスタしかし、rax、rdiなどのasmレジスタに対応しているものはないようです。

組み込みでrcx、rdiなどのレジスタをアドレス指定するにはどうすればよいですか?言い換えれば、これをどのように変換できますか?

mov%0、%rcx

本質的に同等のものに?

4

2 に答える 2

5

組み込み関数のポイントが欠けています。組み込み関数を使用するときにレジスタ割り当てについて心配する必要はありません(場合によっては特殊レジスタにアクセスする場合を除く)。一般的な考え方は、コンパイラにこの種の低レベルのハウスキーピングをすべて処理させることです。生のasmを組み込み関数に移植するには、最初にasmコードをリバースエンジニアリングして、その意味を理解してから、組み込み関数を使用して同等のコードを再実装する必要があります。実際のコードの一部を投稿すると、より具体的な提案が得られる場合があります。

于 2011-10-03T10:55:19.157 に答える
1

次のいずれかを使用できるかどうかを確認してください
。GCC:X86組み込み関数
MSVC ++:組み込み関数のアルファベット順リスト

于 2011-10-03T11:08:30.207 に答える