C言語なら俺に聞け(入門編)Part 96
■ このスレッドは過去ログ倉庫に格納されています
0462デフォルトの名無しさん
2012/02/10(金) 02:42:00.73生産時期 1978年から 生産者 インテル CPU周波数 5 MHz から 10 MHz 命令セット x86 (16ビット)
アーキテクチャ8086は8080のアーキテクチャを16ビットに拡張し、乗除算などの命令を強化したCPUである。
開発にあたってIntelは、8080からの速やかな移行を最重点事項に置き、
8080のアセンブラソースコードに一切の手を加えることなく再アセンブルするだけで、8086用のバイナリを生成する事が出来た。
8086のアーキテクチャでは、プログラム内で通常表現されるアドレスの値は16ビット幅で64KBのメモリ空間である。
当時、64KBのメモリ空間は1つのプログラムにとっては十分に広大であり[3]、セグメント機構はマルチタスクのために用意された。
しかし、8086(あるいは互換品・後継品)がロングセラーになって使われ続けた結果、1つのプログラムにとってさえも64KBのメモリ空間は狭くなってしまい、
アプリケーションのプログラムが自力でセグメントレジスタを操作して64KB以上のメモリ空間にアクセスする手法が用いられるようになった。
C言語コンパイラの実装にあたっては、メモリモデルを限定してしまうか、ポインタをnear(セグメント未使用)、far(セグメント使用)の2種類にわけていた。
後者ではコンパイル時に、メモリモデルを以下のうちからどれか一つ選択するようになっていた。
コード効率やセグメントの扱いやすさから、MS-DOS環境のソフトウェアは、Smallモデルでコンパイルし、
必要に応じて最低限のセグメント操作をプログラマが指示する(適宜farまたはhugeポインタを使用し、
また動的なメモリ確保によって64KBの制限を超える)構造を取っていたものも多い。
■ このスレッドは過去ログ倉庫に格納されています