landker 发表于 2012-03-13 23:04

光盘的读问题

我用虚拟机(bochs)试验了一把光盘启动,虽然成功启动,但当要导入其他文件时,却未能将文件读至指定的地方。具体过程是:
1、系统启动,对第17个扇区(这里由bios完成)
2、在第17个扇区里,我放了boot.bin,里面的内容是提示已进入boot.bin,且将load文件读入0x900:0处
3、这里我取巧了一下,用ultraedit分析了一下光盘的内容,发现load文件在第0x5a扇区处(这样调试变得相对简单)

调试时发现,可以成功打印boot.bin里的信息,但jmp到0x900:0处时,发现里面没有对应的代码。且在执行int 0x13读光盘扇区时,曾报“int13_cdrom: function 42, ELDL out of range ef”错误。

具体代码如下:        org        0x7c00

        jmp short START               
        nop       

;===============================================
dap:        dw        0x10                ; [ 0] Packet size in bytes.
        dw        0x4                ; [ 2] Nr of blocks to transfer.
        dw        0                ; [ 4] Offset
        dw        0x900                ; [ 6] Segment
        dd        0x5a                ; [ 8] start sector number in iso.
        dd        0                ; Block number
;===============================================
               

START:
        mov        ax, cs
        mov        ds, ax
        mov        es, ax

        call        clr_sc
        call        disp_msg
        call        read_sect_main

        ;jmp        $
        jmp        0x900:0

disp_msg:
        mov        ax, mesg
        mov        bp, ax
        mov        cx, 13
        mov        ax, 0x1301
        mov        bx, 0x7
        mov        dl, 0
        int        0x10       
        ret

clr_sc:
        mov        ax, 0x600               
        mov        bx, 0x700               
        mov        cx, 0                       
        mov        dx, 0x184f               
        int        0x10                       
        ret

read_sect_main:

        mov           bx, 0x900               ; Reading to segment 0x900
           mov           es, bx
           xor           bx, bx                  ; Offset 0

              call    read_sector
        ret

read_sector:
              mov           dl, 0xef
        mov           ah, 0x42

              mov        si, dap
              int           0x13   

              ret

;==========================================
mesg:                db        "Hello World!"

landker 发表于 2012-03-13 23:08

ding

landker 发表于 2012-03-14 12:16

回复 2# landker

有人知道吗
   
页: [1]
查看完整版本: 光盘的读问题