● x87 FPU のレジスタ概要
レジスタ・スタック
演算する数値を格納するレジスタで、80 bit 幅が 8 本あります。名前の通りスタック機構を持っており、値をプッシュ/ポップする事でデータのI/Oを行います。
- I/Oや演算は、基本的にスタックの先頭(スタック・トップ)に対して行われます。スタックトップの位置はステータスレジスタ内に 0 〜 7 の数値で格納されており、この値が指す物理レジスタがスタックトップとなります。
コード内では、スタックトップは ST(0) または ST 、続けて ST(1) 、ST(2) 、ST(3) … ST(7) と表現されます。
- ロード命令を実行すると、まずスタックトップ位置をデクリメントし、その後、新しいスタックトップに値を読み込みます。ストア命令は逆に、スタックトップからメモリへ値を書き込んだ後で、スタックトップ位置をインクリメントします。
- スタックトップ位置はラップアラウンドします。ラップアラウンドする事で、まだメモリへ書き込んでいない値が上書きされる場合はスタック・フォルト(スタック・オーバーフロー例外、またはスタック・アンダーフロー例外)になります。