手始めに、各セグメントに保存されているものに惑わされないでください-それはあなたを混乱させるだけです。問題は、16進数の番号付けを理解するように求めることだけであり、それはそれほど難しいことではありません。要件は次のとおりです。
- 合計64KBのメモリ
- アドレス空間の最初の16バイト(アドレス0x0000から開始)は、特殊機能レジスタ(IE1、IE2、IFG1、IFG2など)用に予約されています。
- 次の240バイトは8ビット周辺機器用に予約されています
- 次の256バイトは16ビット周辺機器用に予約されています
- RAMメモリ容量は2Kバイトで、アドレス0x1100から始まります。
- アドレス空間の上部には、コードおよび割り込みベクタテーブル用に予約された56KBのフラッシュメモリがあります。
メモリアドレスの各16進数は16の値(0-F)を処理できるため、64KBのメモリ(16 ^ 4 = 65536、つまり64K)を表示するには4桁が必要です。
あなたは16バイトから始めます、そしてそれは0x0000-0x000F(あなたのアドレスの1桁の完全な数字)をカバーします。つまり、直後に開始する次のセグメント(8ビットデバイス)は0x0010(次のバイト)で始まり、240バイトの長さであるため、バイト256(240 + 16)または0x00FFで終了します。
次のセグメント(16ビットデバイス)は、次のバイト(0x0100)で始まり、長さは256バイトです。これにより、0x01FFで終わります。
次に、2KB(2048バイト)のRAMが搭載されますが、説明にあるように、前のセグメントの直後ではなく、0x1100から開始されるため、これが開始アドレスになります。それに2048を追加すると、0x18FFが得られます。
最後のセグメントはメモリの上部をカバーしているため、逆方向に作業する必要があります。0xFFFF(使用可能なメモリの終わり)で終了し、56KBの長さです。56KBを16進数に変換すると、0xDFFFになります。このセグメントが0で始まると想像すると、2000は未使用のままになります(0xE000-0xEFFFおよび0xF000-0xFFFF)。したがって、このセグメントは、メモリスペースの上限で終了するために0x2000で開始する必要があることがわかります。
それがもっと明確になることを願っていますが、私がそれを読んだとき、それがまったく助けになるかどうかはわかりません:(多分それが私がその概念をより資格のある誰かに教えることを任せる理由です...