「オペレーティングシステム」の版間の差分

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
→‎割り込み: IOポートにイミディエイトアドレスでアクセスすると下位8ビットしかアドレスバスに出ない。16ビットで指定するのはDXレジスタ間接が必要でポートアドレスのレジスタ間接にはDXしか使えない(命令のビットパターンにレジスタを選択するフィールドがない)。現在のx86のCPUではメモリーコントローラはCPUに集積されている。
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
→‎IN命令とOUT命令: ソフトウェア割込みに関する誤った認識を訂正。
タグ: 2017年版ソースエディター
514 行
 
IN命令やOUT命令の引数で、引数でI/Oポートアドレスを指定することで、どのアクセスの読み書きをするかを指定する。
 
CD/DVDドライブやハードディスクは、IDEコントローラーで制御されているので、おそらく、こちらの制御でも読み書きのできる可能性がある。
 
また、キーボードコントローラーも、ポートアドレスが割り当てられている。
528 ⟶ 526行目:
 
 
しかし、コンピュータ黎明期からある、いくつかのデバイスの制御では、IN命令やPUTOUT命令を使わずとも、すでにソフトウェア割り込み命令としてを発生させる INT 命令が用意されている(IN 命令とは異なる)。BIOSによって、 INT 命令に対応したハンドラが用意されている。
 
具体的に言うと、仕様上は、ディスプレイやフロッピーディスクやハードディスク、キーボードなどは、割り込み int 命令によって制御できる仕様であり、int 0x10 はディスプレイとの割り込み、int 0x13 はディスクアクセスとの割り込み、などの仕様がある。
 
 
(※ 要 確認)しかし、近年のデバイス(マザーボード基板上のデバイス。なんらかのコントローラーや専用通信カードなど)には、int命令は対応していない。なので、たとえばUSBコントローラーなどの制御などは、それらの規格に詳しくなる必要がある。
 
具体的に言うと、仕様上は、ディスプレイやフロッピーディスクやハードディスク、キーボードなどは、割り込み intINT 命令によって制御できBIOSの機能を呼び出せる仕様であり、int 0x10 はディスプレイとの割り込み、int 0x13 はディスクアクセスとの割り込み、などの仕様がある。
また、対応してない新デバイスをBIOSレベルで制御したい場合は、IN命令やOUT命令でコードを書いていくしかないだろう。(※ 以上、要 確認)
 
本書では、とりあえず、80年代あたりの古いアーキテクチャを前提とする(資料が入手しやすいので)。そのため、最近のアーキテクチャでは動作しない可能性がある。