はじめて読む486　第2章 486の履歴書

## 2.1 486の位置付け

- CISC（Complexed Instruction Set Computer）
    - 80/86系
        - 8080
            - 8ビットCPUの源流
        - Z80
        - 8086
            - 8ビットCPUの8080からの移行を容易にすることを主眼において開発された16ビットCPU
        - 8088
            - 8086と同アーキテクチャ、外部データバスを8ビットにしたもの
        - 8087
            - 数値演算専用のチップ
            - 8086と協調して動作するように設計されたコプロセッサ
        - 80186
            - 8086に割り込みコントローラなどの各種コントローラ機能を加えて、さまざまな電子制御装置に内蔵しやすくしたもの
        - 286
            - 命令の実行速度の高速化
            - プロテクトモードの導入
            - MS-DOSとの互換性やセグメントの制約があったため、8086の高速版として利用されるのに留まった
        - 386
            - 86系で初の32ビットCPU
            - セグメントのサイズは4Gバイトに
            - 仮想8086モードとページング機能の追加
            - 386DX
                - 80386とも呼ばれる、32ビットCPU
                - 後述する386SXの外部データバスが32ビットのもの
            - 386SX
                - 内部アーキテクチャは386DXと同じで、外部のデータバスを16ビットにしたもの
        - 486
        - Pentium
    - 68系
        - 6800
        - 6809
        - 68000
        - 68020
        - 68030
        - 68040
- RISC（Reduced Instruction Set Computer）
    - MIPS
        - R2000
        - R3000
        - R4000
    - SUN
        - SPARC
        - SuperSPARC
    - IBM
        - PowerPC

## 2.2 486のアーキテクチャ

- アーキテクチャ概要
    - 386のアーキテクチャをそのまま引き継ぎ、性能を大幅に向上させたCPU
    - いくつか種類があるが、486DXが基本形
    - 486DXの特徴
        - キャッシュメモリ
            - メモリとCPUの演算処理部との中間に置く高速メモリ
            - 486は8Kバイト
            - メモリから読み込んだデータのコピーを保持しておく仕組み
                - 高速なメモリチップは高価なので、低速なメモリを基本的には使うが、この場合CPUにウェイトがかかる現象が生じる
                - そこで、キャッシュメモリに最近使われたデータを保持しておくことで、ウェイトがかかる頻度を減らすことができる
            - キャッシュメモリと本来のメモリに書き込む方式は以下の2つがある
                - ライトスルー方式
                    - キャッシュメモリと本来のメモリに同時に書き込む
                - ライトバック方式
                    - 本来のメモリには、その後の別のタイミングで書き込む
                    - 高速な処理が可能な反面、一貫性を保つのが難しくなる
            - CPU内蔵のキャッシュメモリのことを1次メモリ、外部のキャッシュメモリのことを2次メモリという
        - FPU（浮動小数点プロセッサ）内蔵
- 486SX
    - 486DXは非常に集積度が高く、製造にかなりのコストがかかるため、比較的安価に製造できるよう486SXが考えられた
    - 486DXのFPUの部分を無効にしたもの
    - 浮動小数点演算を高速に実行することはできないが、487SXを追加することで浮動小数点演算機能を追加することができる
        - 487SXはCPU部分も含んだ完全な486
        - 486SXに487SXを装着すると、486SXは動作を停止し、487SXが代わりに動作する
- 486DX2/ODP
    - クロックダブラー（CPU内部のクロック信号の倍速化）によって高速化を実現した486
    - CPU外部は動作が遅い（外部のクロック速度になる）点に注意、但しCPU内部のキャッシュメモリがあるので、これにヒットしている間は倍速で実行できる
- DX4
    - クロックトリプラー回路の内蔵
    - キャッシュメモリの容量も16Kバイト（2倍）
    - 消費電力が486DX2より小さい

## 2.3 486の操り方

- 基本機能とシステム管理機能
    - 基本機能
        - 一般命令
            - メモリアクセス
            - 演算・分岐
            - 入出力
            - 浮動小数点演算
        - 特殊命令（リアルモードではモード移行のための一部の命令のみ実行可能）
            - システム管理機能
            - メモリ管理
            - タスク管理
            - 保護機能

## 2.4 486のレジスタ

- レジスタセット
    - 一般レジスタ群
        - 全てのソフトウェアが利用するレジスタ群
        - セグメントレジスタ以外の各レジスタが32ビットに拡張
        - セグメントレジスタもFG, GSが追加
    - 浮動小数点レジスタ群
        - 浮動小数点演算を行うプログラムが利用する
        - 386まではFPUとして独立したチップでサポート
    - システムレジスタ群
        - オペレーティングシステムが利用するレジスタ群
        - これらのレジスタを設定して、メモリ管理やタスク管理機能を働かせる
    - デバッグレジスタ群
        - デバッガが利用するレジスタ
        - プログラムの実行を指定した条件で中断させ、プログラムの実行状況を確認するために使用

## 2.5 486の32ビットアーキテクチャ

- 32ビットのサポート

|  | 16ビットCPU | 32ビットCPU |
| --- | --- | --- |
| オペランドサイズ（扱える数値の範囲） | 0~65535 -32768~32767 | 0~4294967295 -2147483648~2147483647 |
| アドレスサイズ（扱えるアドレス空間オフセットアドレス） | 64Kバイトまで | 4Gバイトまで |
- 32ビットバス
    - データバスが32ビット（本）に拡張
- 32ビットレジスタ
    - 各レジスタの下位16ビットは8086のレジスタと全く同じ役割を持っており、8086のマシン語命令で扱うことができる