8086 には 16 個のレジスタがあり、64K のメモリしかアドレス指定できないと聞きました。それでも、20 個のレジスタを必要とする 1MB のメモリをアドレス指定できます。
レジスタの数とレジスタの幅を誤解しています。8086 には、8 つの 16 ビット「汎用」レジスタ (アドレス指定に使用可能) と、4 つのセグメント レジスタがあります。16 ビット アドレッシングは、2 16 B = 64 KB のメモリしかサポートできないことを意味します。セグメント レジスタからさらに 4 ビットを取得すると、合計 2 4 *64KB = 1MB のメモリをアドレス指定するために使用できる 20 ビットが得られます。
なぜこのように行われるのですか?1MB のメモリをアドレス指定するには 32 個のレジスタがあるようです。
前述のように、8086 には 32 個のレジスタがありません。最近のx86-64でさえ、32個の汎用レジスタがありません。また、レジスタの数は、マシンがアドレス指定できるメモリの量とは関係ありません。アドレスバス幅のみがアドレス指定可能なメモリの量を決定します
8086 の時点では、メモリは非常に高価であり、640 KB は、近い将来に到達するとは誰も考えていなかった膨大な量です。多額の資金を持っていても、大量の RAM を手に入れることはできないかもしれません。したがって、完全な 32 ビット アドレスを使用する必要はありません。
その上、現代の技術で 32 ビット CPU を生産することは容易ではありません。今日の 64 ビット CPU でさえ、すべての 64 ビット アドレス ラインを使用するようには設計されていません。
より多くのワイヤ、レジスタ、シリコン、そしてより広いアドレス空間を持つ CPU を設計、デバッグするために、より多くの人的努力が必要になります。70 年代から 80 年代のテクノロジのトランジスタ サイズは限られているため、実現することすらできない可能性があります。