【发布时间】:2014-11-29 06:30:13
【问题描述】:
我只是想从磁盘读取数据,但出现错误:
[org 0x7c00] ; Offset to the boot sector for NASM
mov [BOOT_DRIVE], dl ; Remember boot drive
mov bp, 0x8000 ; Set up base of the stack
mov sp, bp ; Set up top of the stack
mov bx, 0x0000
mov es, bx
mov bx, 0x9000
mov dh, 5
mov dl, [BOOT_DRIVE]
call disk_load
end: ; System end
jmp end ; Endless scrolling
BOOT_DRIVE: db 0
; load DH sectors to ES:BX from drive DL
disk_load:
pusha
mov ah, 0x02 ; BIOS read sector
mov al, dh ; Read DH sectors
mov ch, 0x00 ; Cylinder 0
mov dh, 0x00 ; Head 0
mov cl, 0x02 ; Sector 2
int 0x13 ; BIOS read
jc disk_load_error ; If error, error <<< this jump happens
popa
ret
disk_load_error:
mov ax, DISK_ERROR
call print_string
jmp $
DISK_ERROR: db "Disk error!", 0
; ... utility print procedures omitted
times 510-($-$$) db 0 ; Fitting into 512 bytes
dw 0xaa55 ; Magic for the BIOS
times 256 dw 0xdada ; Test data
times 256 dw 0xface ; Test data
【问题讨论】:
-
这是16位实模式吗?
-
THIS QUESTION 与您的问题有关吗?乍一看,我不知道它们有多相似
-
我看不到
DS对mov [BOOT_DRIVE], dl的初始化。 -
您尝试先设置 sp = 0x8000,然后按 dx 将驱动器号保存在 dl 中,然后再弹出 dx, mov dh, 5。这将暂时消除 ds 的问题。
标签: assembly interrupt disk bios