簡體   English   中英

程序集BIOS中斷13h磁盤超時

[英]Assembly BIOS Interrupt 13h Disk Timeout

我一直在用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(遵循教學課程)

我認為您是通過將磁盤緩沖區過低(0000:0200)來覆蓋RAM中的BIOS數據區域。 這也可以解釋為什么輸出進入錯誤的屏幕位置-光標位置也存儲在該位置。 引導加載程序可以使用地址0000:0500及以上的所有內存,因此請嘗試將指針設置得更高一些。

我注意到您是ah,第4行為0,而在第1行已經為零。似乎不必要。 不是說節省很多,而是兩個字節就是兩個字節...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM