質問: E820H を行うことによりメモリマップの情報をES:DIで表すアドレスの場所に 保存する・・・ということをやっているはずです。 Int 15/AX=E820h 返り値 まず、diレジスタには何が入っているのか? mov di,.b0 という命令がありました。.b0はラベルなのでどこかに定義されているだろうと探したのですが 定義されていませんでした。(見落としているだけ?) とりあえず、格納するアドレスの下位がdiに入っている。(リアルモードで実行する だから上位のESは16bit余計なので使わない たぶん) で、そこのアドレスには下記の情報が格納されるそうです。 リンク内容 ``` 00h base address (低位ビット) 08h レングス(byte) 10h メモリマップタイプ (高位ビット) ``` よって、よってDIが示すアドレスには・・・ (リトルエンディアンだから高位ビットが下位アドレスに入る。) ``` ---DI---(アドレス下位) メモリマップタイプ 6bit レングス(byte) 2bit base address 8bit (アドレス高位) ``` なので、di + 16としてしまうと まったく別のところを指してしまう気がするのですが・・・ どっから認識が曲がっているのでしょうか? 分からないのでお願いします。
回答: > > 10h メモリマップタイプ (高位ビット) > > > 10hは10新表記では、16でしょう。 ということで、 > > mov ax,[di + 16] > > > というのは、type of address rangeの低位側をaxに、ですな > > 00h QWORD base address > > 08h QWORD length in bytes > > 10h DWORD type of address range (see #00581) > > > オフセット0からの8バイト(QWORD)はbase address オフセット8からの8バイト(QWORD)はlength in bytes オフセット16からの4バイト(DWORD)はtype of address range