光盘的读问题
我用虚拟机(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!" ding
回复 2# landker
有人知道吗
页:
[1]