IA-16
読み:アイエイじゅうろく
外語:IA-16: Intel Architecture 16

 Intel x86シリーズにおける、当初の16ビットアーキテクチャーの、Intel非公式の俗称。
目次

概要
 8086から存在する、もともとの動作モードである。
 32ビット化されて以降も、互換性のため機能が維持された。むしろ、いかにして互換性を維持しながら32ビット化するかに心血が注がれていた。
 64ビット化されても一応残されてはいるが、32ビット動作モードに存在した仮想86モードは、64ビット動作モード(AMD64 ISA/Intel 64)には存在しない。もはや過去の存在である。

特徴

呼称
 16ビットしかない頃はこのような呼称はなく、32ビットのi386が登場し32ビットOSが普及し始めた頃も「リアルモード」や「仮想86モード」など動作モードで呼ばれており、このような呼称はなかった。
 Intelが「Itanium」(Merced)用アーキテクチャーを「IA-64」と呼び、従来の32ビットアーキテクチャーを「IA-32」と呼んだことが全ての始まりである。
 16ビットは既に過去の存在と考えたか、特にIntelから呼称は与えられなかったが、当然の帰結として、このように呼ぶと便利なことから俗称としてIA-16という俗称が生まれ使われるようになった。

セグメント方式

アドレッシング方法
 16ビット動作モードでは「セグメント:オフセット」という特殊な形式でアドレッシングが行なわれていた。おのおの16ビットであり、セグメントは16倍して加算されるため、総計で20ビット(1Miバイト)のアドレッシングが可能だった。
 セグメントはセグメントレジスターと呼ばれる専用レジスターが用意され、メモリーアクセス時にセグメントレジスターをつければ20ビットでアクセスでき、さもなくば16ビットの範囲内のみでアクセスできた。
 但しセグメントを指定するとプログラムサイズが増え、かつまた処理速度も遅くなるため、必要時以外はセグメントを指定しない、という使い分けが必要だった。

ポインター
 Cで、このアドレッシング方式をポインター変数として実現する必要があったが、Cの標準仕様の範囲内では不可能だったため、特殊な方式が使われた。以下のように呼ばれている。
 このポインターを区別するため、far/near/hugeというCの規格外となる独自の予約語を定義し、以下のように使用した。
 unsigned char near *np;
 unsigned char far *fp;
 unsigned char huge *hp;
 規格の流儀に則るならば、__far や __near などとするべきだったが、最初にこの方式を考案したCコンパイラー実装者(おそらくMicrosoft)が作った仕様は、他と互換性がなくなる方式だったようである。

再検索