我正在尝试读取8086程序集中第一个硬盘的第一个扇区。我之前从未尝试过在8086程序集中进行磁盘访问。 我正在使用DosBox,而汇编程序是MASM ver 6.11。
这是我根据从CHS和INT 13H的维基百科页面学到的信息整理的程序。
;***************************************************************************;
TheStack SEGMENT STACK ;
;***************************************************************************;
db 64 dup ('THESTACK')
;***************************************************************************;
TheStack ENDS ;
;***************************************************************************;
;***************************************************************************;
Data SEGMENT ;
;***************************************************************************;
sectBuff db 1024 dup ("!")
;***************************************************************************;
Data ENDS ;
;***************************************************************************;
;***************************************************************************;
Code SEGMENT ;
;***************************************************************************;
assume CS:Code,DS:Data ;
MAIN PROC ;
Start: ;
mov ax, data ;
mov ds, ax ;
;***************************************************************************;
mov bx, ds ;copy ds into es
mov es, bx
lea bx, sectBuff ;bx takes the offset of sectBuff
;now es:[bx] points to sectBuff
mov ah, 2h ;select the read sectors function
mov al, 1h ;number of sectors to read
mov ch, 0h ;cylinder number (0 - 1023, 2 high bits in cl)
mov cl, 1h ;starting sector number (1-63 last 6 bits)
mov dh, 0h ;head number
mov dl, 80h ;first hard drive
int 13h
;***************************************************************************;
mov AH,4CH ;
mov AL,0 ;
int 21H ;
MAIN ENDP ;
Code ENDS ;
END Start ;
;***************************************************************************;
运行程序后,DosBox无限期挂起,没有任何内容写入sectBuff。
用debugx(ms-debug的克隆)调试程序后,我看到调用int 13H后,AH寄存器中出现错误代码FF。
根据Int 13H上的维基百科页面,错误代码FF对应于“感知操作失败”错误。
我做错了什么?