簡體   English   中英

在引導加載程序中從引導映像加載扇區失敗

[英]Loading sector from boot image fails in bootloader

我正在嘗試構建自己的引導加載程序,該加載程序然后加載然后從實模式切換到保護模式,加載GDT描述符,然后調用一些第2階段代碼。 由於我無法找到調試程序的好方法,因此要使工作正常進行是艱巨的任務。 出於某種奇怪的原因,我的代碼無法將我的引導加載程序的第二個扇區讀取到內存中0x1000地址處。 我嘗試將int 0x13al = 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.

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