[linux-users: 108945] Re: BIOS-e820

KATO Masashi mkato @ par.odn.ne.jp
2013年 6月 18日 (火) 19:12:34 JST


加藤と申します。

Tue, 18 Jun 2013 17:15:47 +0900 付
katot @ jp.fujitsu.comさんのメールより引用:

> AXレジスタに"e820"と値を入れて、int 15hを呼び出すと、戻り値が
> メモリの使用状況って事であってます?

ここは AT 互換機の - x86系機械語命令レベルの話になりますね。

"int" は機械語(アセンブラ)の割り込み(interrupt)命令で、主としてCPUやメモ
リから見て「外部機器」にあたるシステムタイマ、キーボード、BIOSチップなど
との連携用に使われる命令です。

どの機器にアクセスするかを決めるのが int 命令のパラメータ ("割り込みベク
タ番号"といいます。ここでは 15H(=10進数で21)) で、この命令(int 15h)が発
行されると、 BIOS チップ内のシステムサービスが呼び出されます。

この時 CPU内の AXレジスタの値を E820H(=10進数で59424)にセットしておく
と、BIOSチップ内のシステムサービスプログラムの中のメモリマップ取得プログ
ラムが実行され、結果のデータ(実際のデータを書き込んだメモリアドレスなど)
が CPU内の各レジスタにセットされます。

以下、CPU内のレジスタの値を調べて、実際に結果を表示するのは「int 15h」命
令を発行した側のプログラム(ここでは dmesg)の仕事になります。

割り込みベクタ番号表(Interrupt Jump Table)は
  http://www.ctyme.com/intr/int.htm
システムサービス(int 15)の種類と実行時のレジスタの値は
  http://www.ctyme.com/intr/int-15.htm
機械語レベルでの INT 15h, AX=E820H 命令実行前後の各レジスタの値等は
  http://www.uruk.org/orig-grub/mem64mb.html
が参考になると思います。


linux-users メーリングリストの案内