3

私の質問は、8085 マイクロプロセッサの他の命令に 4 つあるのに、CALL 命令のオペコード フェッチに 6T 状態があるのはなぜですか。私はたくさん検索しましたが、満足のいく答えは見つかりませんでした。

ここ: http://www.edaboard.com/thread201650.html CALL の場合に使用されるデュアル アドレッシング モードと関係があると書かれています。しかし、なぜ 6T が述べられているのかを実際には説明していません。

何か案が?

編集

この疑問は、CALL が 18 の T ステートを取ることを知ったときに生じました。

私の計算によると、次のようになります: 4 (オペコード フェッチの場合) + 3 + 3 (サブルーチン アドレスを読み取るための 2 回のメモリ読み取り) + 3 + 3 (スタックへの 2 回のメモリ書き込みの場合) = 16

そのため、インターネットを検索すると、CALL の場合のオペコード フェッチ部分が 4 ではなく 6T 状態を取ることがわかりました。

アップデート

コメントを読んで再考した後、PUSH は通常、命令として 12 個の T ステートを取ることを知りました。明示的な PUSH 命令がないため、CALL の場合は PUSH のオペコード フェッチ部分を無視できます。したがって、8 (12 - 4) になります。それで、スタックポインタのデクリメントのせいでしょうか?プッシュでも 6 (メモリ書き込みの場合は 3 + 3) のはずだったのに、ここでは 8 (4 + 4) になっているからです。

4

2 に答える 2

7

6 (オペコード フェッチ) + 3 + 3 (サブルーチン アドレスを読み取るための 2 回のメモリ読み取り) + 3 + 3 (スタックへの 2 回のメモリ書き込み) = 18

したがって、通常の場合のように 4 T ステートではなく、オペコード フェッチの 6 T ステートが混乱を招くと思います。4 T ステートは、他の命令フェッチと同様にオペコードをフェッチするために使用されます。2 T ステートは、スタック ポインター (SP) を処理するために使用されます。スタックの一番上には何も格納されていないため、呼び出しが発生すると、プログラムカウンターの現在の内容 (呼び出しが書き込まれた行のアドレス) がスタックにプッシュされます。実行が完了したら、スタックの内容を戻す必要があります。したがって、呼び出しには、他の命令フェッチよりも 2 つの追加の状態が必要です。

于 2017-09-04T08:34:43.603 に答える