[英]Loading sector from boot image fails in bootloader
我正在嘗試構建自己的引導加載程序,該加載程序然后加載然后從實模式切換到保護模式,加載GDT描述符,然后調用一些第2階段代碼。 由於我無法找到調試程序的好方法,因此要使工作正常進行是艱巨的任務。 出於某種奇怪的原因,我的代碼無法將我的引導加載程序的第二個扇區讀取到內存中0x1000
地址處。 我嘗試將int 0x13
與al = 0x01
一起使用,這是Get Status of Last Drive Operation
中斷的Get Status of Last Drive Operation
。 它返回0x01
,這意味着Invalid Command
,這進一步使我感到困惑。
mov ah, 0 ;reset drive
int 0x13
or ah, ah ;check for error
jnz err ;error handling function (prints ASCII A)
mov ax, 0
mov es, ax
mov bx, 0x1000 ;read sector into 0000:0x1000
mov ah, 0x02 ;read sector
mov al, 1 ;# of sectors to read = 1
mov ch, 0 ;Cylinder = 0
mov cl, 0x02 ;Sector to read = 2 (second as first sector is this code)
mov dh, 0 ;head = 0
;dl should equal the drive number as BIOS automatically detects it
int 0x13
or ah, ah
jnz err ;check for error again (this is where the error occurs)
引導計算機時,我被告知BIOS將驅動器號放入dl
寄存器中,因此所有中斷都應在正確的驅動器上執行。 我什至嘗試將dl
設置為0x00
,這等於軟盤驅動器A:
在BOCHS(CPU仿真器)中,我將軟盤驅動器A:
為啟動映像,但仍然無法啟動。 QEMU和BOCHS無法正確模擬代碼是否有某些原因? 我還沒有嘗試將其刻錄到USB並從實時BIOS引導它。 我將在此處發布完整的代碼,以便您在必要時進行查看。 如果我不夠清楚,我深表歉意,我是OS開發的初學者。 非常感謝!
編輯:操作系統:Windows 7 x64(正在開發x32操作系統)仿真:運行由NASM編譯器創建的boot.img的BOCHS。
您正在錯誤地檢查錯誤。 例如,int 0x13 ah = 0通過設置進位標志而不是通過報告ah來指示錯誤。 如果使用jc err設置了進位,則應該跳而不是ah啊jnz err。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.