3

私はしばらくの間、この質問について考えています: ARM7 (3 つのパイプラインを備えた) プロセッサはいつ PC レジスタを増やしますか?

私はもともと、命令が実行された後、プロセッサは最後の実行で例外があるかどうかを最初にチェックし、現在の状態に応じて PC を 2 または 4 増やすと考えていました。例外が発生した場合、ARM7 はその実行モードを変更し、PC を現在のモードの LR に格納し、PC レジスタを変更せずに現在の例外の処理を開始します。

しかし、戻り命令を分析するときには意味がありません。undefined-instruction-exception から戻るときに PC に LR が割り当てられ、prefetch-abort-exception から LR-4 が割り当てられる理由がわかりません。これらの例外の両方がデコード状態で発生していませんか? さらに、私の教科書によると、例外が発生する前のプロセッサの状態 (ARM または Thumb) に関係なく、PC には prefetch-abort-exception から戻るときに常に LR-4 が割り当てられます。ただし、元の状態が Thumb の場合、PC には LR-2 を割り当てる必要があると思います。Thumb 命令は、ARM 命令が保持する 4 バイトではなく 2 バイトの長さであり、現在の状態で命令をロールバックしたいだけだからです。 . 私の推論に欠陥があるか、教科書に何か問題がありますか?

長い質問のようです。誰かが正しい答えを得るのを手伝ってくれることを本当に願っています。

前もって感謝します。

4

1 に答える 1

2

未定義命令の処理から LR に戻ります。これは、トラップを引き起こした命令の次の命令を指しているためです。同じ未定義の命令に再び戻りたくない場合は、同じトラップにヒットするだけです。

同じ命令を再度実行する場合は、プリフェッチ アボートから LR-4 に戻ります。おそらく、メモリをマップしたため、動作するようになりました。

パイプラインのどの時点で ARM7が実際にその PC を増加させるかは無関係です。なぜなら、実行中の PC の値と、結果としてアボート ハンドラの LR の値は、ARM アーキテクチャ標準の一部として定められたものだからです。そのPCでやった。

ただし、元の状態が Thumb の場合、PC は LR-2 を割り当てる必要があると思います。

それは理にかなっていますが、例外ハンドラーは、それをトリガーした元のコードが ARM コードか Thumb コードかを知る必要があります。Thumb を認識しない例外処理コードがたくさんあったため、これは互換性にも影響を与えた可能性があります。代わりに、Thumb アーキテクチャは、例外ハンドラへのエントリで LR をごまかして、ハンドラが常に同じ命令を使用して戻ることができるようにしました。

于 2010-04-15T12:50:01.170 に答える