1

キャッシュ内のメモリアドレスの内容を照会したり、レジスタ内の現在の値を取得したりできる方法は (ASM/C/C++ で) ありますか?

これは実質的にハイゼンベルグの原理のようなものでしょうか? レジスタから値を取得しようとするコードにより、レジスタがアンロードされる可能性がありますか?

4

1 に答える 1

2

ほとんどのプロセッサには、「キャッシュから値を読み取る」ための標準的な命令はありません。最新のプロセッサは、テスト目的でキャッシュ コンテンツを読み書きできると推測できますが、そのような命令がある場合、それらは公に記述されておらず、実際のコード実行に干渉しないように使用する際にはおそらく注意が必要です。メモリを読み取ると、検査するキャッシュラインにあるものに影響を与える可能性があります。

レジスタ値は、コードの書き方にかなりの注意を払う必要があり、通常、どこかに影響を与えずにすべてのレジスタ値を格納することはほとんど不可能ですが、ほとんどのプロセッサでは、「プッシュ」タイプの命令を使用して値を格納することでかなり近づけることができますスタック。値が「保存」されると、通常のメモリ読み取り命令を使用してフェッチできます。値は既に格納されているため、残りのコードには (ほぼ) 任意のレジスタを使用できます。

編集: プロセッサの種類が指定されているため: 32 ビット モードの x86 プロセッサでは、PUSHAすべてのレジスタをスタックにプッシュするために使用できます (リストの中央にある ESP の ORIGINAL 値を含む)。ただし、x86-64 の場合、レジスタごとに個別の PUSH 命令を使用する必要があります。しかし、それを行うことはまだ実行可能です。

キャッシュの内容を検査するためのインテルからの指示についてはよく知りません。

于 2013-07-02T23:33:00.750 に答える