←練習問題へ :  INDEX :  次ページへ→


入出力


8-1.概要

  入出力はI/O(Input / Output)と略される。コンピュータのI/Oはもう少し意味が拡張されており、キーボード、プリンター、ディスプレイなど「うん、入出力機器だな」とわかるものから、タイマーなど、「えっ、入出力機器なの?」というものまで含まれ、キーボードでもキーボードを制御する半導体などもI/Oと言う。

  今半導体という言葉を出したが、ほとんどの装置はその装置を制御する半導体があるからこそ使える。下図のようにその制御する半導体はメモリーと同じように、制御線、アドレスバス、データバスからなる。

  ということは、CPUから見れば、メモリーと全く同じなのである。ただしコンピュータによってはその扱い方が異なり、その方法は2種類ある。

Memory Mapped I/O
  主に、モトローラ系CPU、日立系CPU、NEC系CPUで採用されている。

  例えばアドレスバスが16bitのCPUでは65536バイトのメモリー空間を使用できる。そのうち少しをこのI/O用のデバイス制御の空間を設ける方法である。

  65536バイトのうち、上位256バイト分をこのデバイス制御に割り当てると、その256 バイトに「MOV」命令のような転送命令でデータを書き込むと、メモリーではなくて、デバイス制御装置にデータが渡される。逆にその256バイトからデータを読もうとすると、メモリーからではなくて、デバイス制御装置の状態が読みとれる方法である。

  この方法では、アクセス方法は非常に簡単だが、メモリー空間が少なくなること、プログラムが暴走した際に、偶然にもディスクコントローラーにデータを送ってしまうと、フロッピーが壊れたり、何が起こるか全く予想がつかないなどの欠点がある。

I/O Mapped I/O
  主に、インテル系CPU、NEC系CPUに採用されている。

  x86系CPUで使われている方法で、例えばx86系CPUではメモリー空間のほかに、 64Kバイト(65536バイト)分の入出力専用の空間を設けている。入出力に関わるデータ転送などは、この専用の空間を用いてアクセスする。

  従って、メモリー専用の入出力命令「MOV」ではなくて、専用の命令を用いなければならない。それがこの章で解説する「IN」、「OUT」、「INS」、「OUTS」である。

  この方法では、メモリー空間とは別の専用空間を用いるので、メモリー空間が少なくなることがなく、プログラムが暴走してもフロッピーが壊れるなど予期せぬアクシデントが少ない。


←練習問題へ :  INDEX :  次ページへ→