[英]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.