尝试读取硬盘的第一个扇区时,“Sense Operation Failed”错误代码

时间:2016-11-25 20:18:38

标签: assembly x86-16 dosbox

我正在尝试读取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对应于“感知操作失败”错误。

我做错了什么?

0 个答案:

没有答案