2

これはばかげているように聞こえるかもしれませんが、コア 1 の 1 つのレジスターをコア 2 のレジスターにロードするコードを記述するためのアセンブリ プログラマーへのインターフェイスがあるかどうかは、私にはわかりません。たとえば、コア 1 の EAX をコア 2 の EAX にロードします。それも可能ですか?

さらに、アセンブリ プログラマが 2 つのコアを使用する (複数のコアでコードを実行する) ためのインターフェイスは何ですか?

4

2 に答える 2

1

いいえ。これを行うには、一方のコアが値をメモリに格納し、もう一方のコアが値を取り出す必要があります。したがって、コアは次のようになります。

mov eax, [235]

そしてコア2はこれを行います:

mov [235], eax
于 2012-11-19T05:13:55.703 に答える
1

ハードウェアはこれを直接提供しません。

ただし、実際のツール (デバッガなど) を構築するには、このような機能が必要です。これは通常、ある CPU が別の CPU を「停止」し、そのレジスタ状態を検査し、そのレジスタ状態を変更し、シングルステップで、他の CPU のメモリ マップを変更するための機能を提供するシステムのカーネル ソフトウェアによって実装されます。など。このような機能は、ある CPU が別の CPU に割り込むことを可能にする低レベルのハードウェア プリミティブと、CPU 割り込みによって割り込まれた CPU がその状態を割り込み元の CPU で利用できるようにするように構成されたコードの上に構築されます。(これは非常にトリッキーなコードになる傾向があり、ハードウェアに大きく依存します)。

Windows は、Win32 呼び出し GetThreadContext() を介してこれらの機能 (少なくともレジスタ アクセス部分) を提供します。Win64 に相当するものや、Linux などに類似したものがあると確信しています。

于 2012-11-19T05:46:09.107 に答える