これはばかげているように聞こえるかもしれませんが、コア 1 の 1 つのレジスターをコア 2 のレジスターにロードするコードを記述するためのアセンブリ プログラマーへのインターフェイスがあるかどうかは、私にはわかりません。たとえば、コア 1 の EAX をコア 2 の EAX にロードします。それも可能ですか?
さらに、アセンブリ プログラマが 2 つのコアを使用する (複数のコアでコードを実行する) ためのインターフェイスは何ですか?
これはばかげているように聞こえるかもしれませんが、コア 1 の 1 つのレジスターをコア 2 のレジスターにロードするコードを記述するためのアセンブリ プログラマーへのインターフェイスがあるかどうかは、私にはわかりません。たとえば、コア 1 の EAX をコア 2 の EAX にロードします。それも可能ですか?
さらに、アセンブリ プログラマが 2 つのコアを使用する (複数のコアでコードを実行する) ためのインターフェイスは何ですか?
いいえ。これを行うには、一方のコアが値をメモリに格納し、もう一方のコアが値を取り出す必要があります。したがって、コアは次のようになります。
mov eax, [235]
そしてコア2はこれを行います:
mov [235], eax
ハードウェアはこれを直接提供しません。
ただし、実際のツール (デバッガなど) を構築するには、このような機能が必要です。これは通常、ある CPU が別の CPU を「停止」し、そのレジスタ状態を検査し、そのレジスタ状態を変更し、シングルステップで、他の CPU のメモリ マップを変更するための機能を提供するシステムのカーネル ソフトウェアによって実装されます。など。このような機能は、ある CPU が別の CPU に割り込むことを可能にする低レベルのハードウェア プリミティブと、CPU 割り込みによって割り込まれた CPU がその状態を割り込み元の CPU で利用できるようにするように構成されたコードの上に構築されます。(これは非常にトリッキーなコードになる傾向があり、ハードウェアに大きく依存します)。
Windows は、Win32 呼び出し GetThreadContext() を介してこれらの機能 (少なくともレジスタ アクセス部分) を提供します。Win64 に相当するものや、Linux などに類似したものがあると確信しています。