x64のインテルによれば、以下のレジスタは汎用レジスタ(RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、R8~R15)https://software.intel.com/en-us/articles/introduction-to-x64-assemblyと呼ばれています。rpbとrspが汎用レジスタと呼ばれるのはなぜですか?
以下の記事では、RBPとRSPが専用レジスタ(RBPが現在のスタックフレームの基点を指し、RSPが現在のスタックフレームの先頭を指している)と書かれています。 https://www.recurse.com/blog/7-understanding-c-by-learning-assembly
私は2つの矛盾した声明を持っています。 Intelのステートメントは信頼できるものでなければなりませんが、何が正しいのですか、なぜRBPとRSPが汎用と呼ばれるのですか?
ありがとうございました。
両方を汎用レジスタとして使用することができます。これは、通常の算術演算命令と論理命令で正常に動作することを意味します。 'rbp'はかなり一般的な目的ですが、フレームポインタは単なる慣習です。 – Jester
一部の命令では、すべてのレジスタに特殊な機能(R8〜R15を除く)があります。 RSPの場合、 'push' /' pop'/'call' /' ret'のために特別なので、ほとんどのコードは決してそれを他のものに使うことはありません。しかし、制御された条件付き(シグナルハンドラなしのような)では、スタックポインタとして*使用する必要はありません。例えばこのコードを使用して、[this code-golf answer](https://codegolf.stackexchange.com/questions/133618/extreme-fibonacci/135618#135618)のように、 'pop 'というループで配列を読み込むことができます。 (私は実際には 'esp'を32ビットコードで使用しましたが、同じ違いです)。 –
"specialness"の定義をエンコーディングに拡張しても、r13でも少し特殊ですが、実際にはすべてのアドレッシングモードを効果的に使用できるという点では機能しません。あなたのために隠されたゼロ変位)。 – BeeOnRope