我试图通过以下代码读取磁盘扇区:
disk_load :
push dx
mov ah , 0x02 ; BIOS read sector function
mov al , dh ; Read DH sectors(dh is initialized before calling the routine)
mov ch , 0x01 ;
mov dh , 0x00 ; Select head 0
mov cl , 0x02 ; Start reading from second sector ( i.e.
; after the boot sector )
mov dl,0x80 (tried with 0x00 as well)
int 0x13 ; BIOS interrupt
pop dx ; Restore DX from the stack
jc cset
cmp dh,al ; if AL ( sectors read ) != DH ( sectors expected )
jne disk_error ;
问题是,每次表示错误时都会设置进位标志。最初我尝试启动磁盘0x00,当我检查AL寄存器后发现没有扇区被读取。然后我改为0x80,现在AL寄存器将具有所请求的扇区的确切数量,但仍然设置了Carry标志!
那么这可能是什么问题? Carry似乎总是在int 0x13之后设置! 如果重要的话,我在Virtual Box中运行一个iso文件。
答案 0 :(得分:4)
一些提示:
CH
零,而不是一个,因为圆柱体从零开始编号。AH
中返回错误代码,您看过那个吗?DL
为您传递启动驱动器,因此不需要覆盖它。使用软盘映像和固定点#1,它适用于我的bochs和qemu(没有virtualbox)。