8087がコードを処理する小さいプログラムで動作を確認していきます。
8086がESCコードを検出すると/RQ・/GTピンで8087とローカルバス使用権の調停を行い、自身は次のWAIT命令をフェッチして待機中にとなります。
一方8087はコードをデコードして処理を開始すると自身のBUSYピンをHにして処理中を8086へ通知しますが8086はこれが解除されるまでWAIT状態のままのため処理の同期が取れることになります
最小プログラムはこんな感じになるでしょうか。
8087でのNOP(FNOP)をCPUがWAIT状態で待ち、抜けてきたら先頭に戻るというループです。
これを実行させているときの8087のBUSYピンの波形です。
この波形がHの時は8087が動作中、Lのときは8086が動作中とみることができます
FNOPの処理時間は約2μsということになります。一方8086が命令を実行しているLの期間は5μs。このときのBUSYのデューティ比が8087の稼働率と読み替えることもできるのでこの場合は2/(2+5)=28%となります
今度はもっと処理に時間のかかる8087コードでやってみます
その中でもっともクロック数が多そうな「FYL2X」(2を底とする対数関数)でやってみます。
アセンブル結果をメモリにセットして実行
BUSYがHの期間がどっと増えて8087が一生懸命計算していることが判ります。
8086の処理部分は変わらないので、この時の8087稼働率は 152/(152+5)=97%になります。