|
发表于 2012-2-14 19:46:10
|
显示全部楼层
答问题1:
ecx中会填写 磁盘上扇区的总数
这个磁盘总数是grub在安装的时候,从磁盘上读取出来的,然后填写在stage1预留的地方。
并非BIOS填写的数据。这些都是grub传递参数的一种方法。省的在启动时候还好确定硬盘有多少扇区等信息。
grub可参考intall_func来看。
lilo就没有预留BPB空间,貌似直接通过中断调用获取的。
我查到如下终端调用可读取硬盘、软盘信息。
下面是INT 13H,功能08H
(9)、功能08H
功能描述:读取驱动器参数
入口参数:AH=08H
DL=驱动器,00H~7FH:软盘;80H~0FFH:硬盘
出口参数:CF=1——操作失败,AH=状态代码,参见功能号01H中的说明,否则, BL=01H — 360K
=02H — 1.2M
=03H — 720K
=04H — 1.44M
CH=柱面数的低8位
CL的位7-6=柱面数的该2位
CL的位5-0=扇区数
DH=磁头数
DL=驱动器数
ESI=磁盘驱动器参数表地址
Post by chin09;2031590
我选的是grub0.93,假设启动盘是默认的硬盘启动,且支持lba寻址,
问题一:
读stage1时,有这么一句
lba_mode:
/* save the total number of sectors */
movl 0x10(%si), %ecx
则ecx=?,the total numbers of sectors 作何解?,有何用处?是bios先在0x10(%si)设置好的吗?
|
|