【发布时间】:2014-07-23 04:18:12
【问题描述】:
我一直在 NASM 中编写引导加载程序,但在读取磁盘时遇到问题:当我尝试读取多个扇区时磁盘超时:
xor ax, ax
mov es, ax
mov ds, ax
mov ah, 0
int 0x13 ; Reset disk with int 0x13 ah 0x0
mov al, 2 ; Read 2 sectors
mov ah, 0x2 ; int 13 ah 0x2 is read disk
mov bx, 0x200 ; Load to 0x200
mov cl, 2 ; Sector 2
mov ch, 0 ; Cylinder 0
mov dl, 0 ; Floppy drive 0
mov dh, 1 ; Head 1
; LBA is block 19 (root directory of FAT12)
int 0x13
mov si, bx ; Print first filename to check success
当我使用mov cl,1,即读取一个扇区而不是两个(或更多)扇区时,程序正常打印第一个文件名,没有错误。然而,当我尝试读取多个扇区时,文件名没有正常打印*并且ah 包含0x80,这对应于磁盘超时(即它尚未准备好)以及设置进位标志。我无法弄清楚为什么会这样。谢谢。
*字符串打印在屏幕右上角——远离光标位置
软件:Virtual Floppy Drive + Bochs 2.6.2(遵循this 教程)
【问题讨论】:
-
为什么要将段寄存器设置为 0?
-
这是引导加载程序的开头;我删掉了很多不相关的代码。将段寄存器归零可使
si、di和bx更易于寻址。
标签: assembly operating-system interrupt