8085-86で生成された物理アドレスのさまざまな開始アドレスを理解できません。CS:IP
これはスタックのせいですか?スタックの概念は8085より前に存在していたと思います。助けてください。ありがとう。
3 に答える
答えは割り込みベクタテーブル(IVT)にあると思います。IVTは8086プロセッサに導入されました。8085(8080プロセッサに基づいた設計)は、割り込みを処理するために別の方法を使用します。8086/8088では、IVTはメモリの最初の1024バイトを使用します(それぞれ4バイトで構成される256の割り込みベクトル)。このため、その領域に実行可能コードを含めることはできません。80286以降、x86 / x64プロセッサには割り込みディスクリプタテーブルレジスタ(IDTR)があり、ソフトウェアがプロセッサのアドレス空間の都合のよい場所に割り込みベクタテーブルを再配置できるように変更できます。
技術的には:-8085にはCSレジスタがなく、そのアドレス空間は64KiBに制限されています-電源投入後、8085での実行はアドレス0x0000で開始されます-x86およびx64ファミリのプロセッサでの実行はアドレス可能なメモリ。したがって、20個のアドレスラインを持つ16ビットプロセッサでは、これは線形アドレス0xFFFF0になります。32ビットプロセッサではアドレス0xFFFFFFF0、64ビットプロセッサでは0xFFFFFFFFFFFFFFF0です。システムROMは、これらのアドレスに応答するようにメモリバスに配線する必要があります。
公式の説明については、 Intelプロセッサのマニュアルを確認してください。
パワーアップIPに特定の値を使用できると考える理由は3つあります。
- 慣例-同じファミリー/ブランドの他のプロセッサーは同じ場所を使用しており、顧客に親しみやすさを感じさせたい
- 互換性
- 特定の領域は、特定の目的のために制限または強化されています。たとえば、6502には、0x00から0xffまでのメモリの最初の256バイトにアクセスするための特別な高速命令があります。そのCPUでは、CPUを別の場所で起動するのが理にかなっています。(ただし、8086はメモリのどの領域も特別に扱うとは思いません。)
互換性と規則の問題はさておき、プロセッサの電源を入れたときに命令ポインタが取得する値は、ほとんど任意です。ほとんどのモデルでは、IPは最初はアドレス空間の最上部に非常に近い(実際の初期化コードがある場所に到達するための遠いJMP呼び出しのための十分なスペースがある)か、最下部(つまり0)にあります。
ウィキペディア の記事によると、8086は、以前のプロセッサのアセンブリソースコードを簡単に変換して8086で動作するように設計されていますが、それだけです。それを除けば、以前のモデルと互換性を持たせる試みはありませんでした。
1)8085では、リセット時のpcの値は0000hです。したがって、ウェイクアッププログラムは0000hの場所に作成する必要があり、空のままにすることはできません。
2)8086では、CSとlPのリセット値はそれぞれFFFFHと0000hです。したがって、20ビットの物理アドレスはFFFF0 + 0000=FFFF0Hになります。空のままにしないでください。ウェイクアッププログラム(コード)は常にROMにあり、FFFF0HをカバーするためにROMを最後にインターフェイスする必要があります。