| 
 | 
 本帖最后由 mdyblog 于 2014-7-26 18:48 编辑  
 
 我写了一段Loader 调入 G4D的 grldr 并运行。我是从16扇区(前面跳过16扇区)开始读取grldr 到内存0820:0000并运行。 
grldr版本是 0.4.5c 2013-0117  
 
本来是CHS方式 -INT13-AH2读取, 很正常。 
 
现在改成LBA方式-INT13-AH42读取,数据都正确读到内存了。但是有个问题。 
如果随便个地方 “CHS方式 -INT13-AH2读取”1 扇区到没用的内存, grldr就能正常运行启动, 找到(hd0)上的文件并出菜单。 
- //FIXME 否则Grub4DOS不认根设备
 
 -         xor        %ebx, %ebx        /* %bx = 0, put it at 0 in the segment */
 
 -         movw        %bx, %es        /* load %es segment with disk buffer */
 
 -         mov         $0x7A00, %ebx
 
 -         movb    $0, %dh   //head
 
 -         movw    $(1*0x100+0x01), %cx   //ch=cyl cl=sec
 
 -         movw        $0x0201, %ax        /* function 2 */
 
 -         int        $0x13  //这句不能省
 
  复制代码 
放在LBA读取前,后均可。 
否则,grldr启动后root为(fd0)以至找不到(hd0)上的文件。 
【 int        $0x13 】 这句还不能省。 
 
这是为什么啊?问题在哪儿?怎么去掉这几行,直接初始话对应寄存器。 
 
 
启动设备我是通过 %dl 寄存器传下去的。测试为0x80. 
                 %dh 寄存器是分区号,测试为0xff. 
 
 
LBA 读取时, 怎么传递参数,grldr 才能 正常 找到初始根设备(启动设备)。 
弄了好几天,卡在这里。 
 
2) 另外,测试了下 0.4.6a又可以。这是为什么啊? 
 
 
我担心的是我的代码问题。如果只是旧版grldr 才有的问题, 而不是我代码的问题。 
那就绕过去好了。换个版本。 
请大神分析下,给个答复。 
 
 
望大神指点!!!! 
 
 
 
 
 
 |   
 
 
 
 |