我正在尝试通过以下代码读取磁盘扇区:
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 寄存器将具有请求的确切扇区数,但仍然设置了进位标志!
那么这里可能是什么问题呢?进位似乎总是在 int 0x13 之后设置!如果这很重要,我正在 Virtual Box 中运行一个 iso 文件。