日期:2014-05-16  浏览次数:20600 次

linux-0.11调试教程,setup.s中的硬盘参数表

        setup.s获取显卡信息和硬盘信息,因为硬盘信息的地址在中断向量int0x41处既0x0000:0104,所以bootsect.s中把Image中的system部分移到了0x10000开始的地方,(而不是直接移到0x0000处,防止覆盖掉硬盘参数表的地址和硬盘参数表,因为硬盘参数表的地址在0x9fc0:0x003d处!),setup.s里面的代码取得硬盘参数表后再把0x10000处的system向下移动到0x0000处。


内存地址4*0x41=0x104开始的4个字节表示硬盘参数表的段地址(后面2字节)和偏移地址(前面2字节),  

lds    si,[4*0x41]指令之前DS为0x0000,之后为0x9fc0!

相关代码:

! Get hd0 data

    mov    ax,#0x0000
    mov    ds,ax
    lds    si,[4*0x41]
    mov    ax,#INITSEG
    mov    es,ax
    mov    di,#0x0080
    mov    cx,#0x10
    rep
    movsb