5

x86 マシン用の小さなオペレーティング システムを作成しようとしていて、かなり最小限のブートローダーのコードを書き始めました。私が作成したブートローダーは非常に単純で、マスター ブート レコードの直後にあるセクターからスモール セカンド ブートローダーをロードし、そのコードにジャンプします。マスター ブート レコードのブートローダー コードは正常に動作しているようですが、第 2 段階のブートローダーにジャンプしようとすると問題が発生します。この第 2 段階のブートローダーは、成功を示す文字 (文字 S) を出力することになっているため、コードが実行されていることがわかります。問題は、画面に何も表示されないことです。そのため、第 2 段階のブートローダーが実行されていないと思われます。私が使用したコードは次のとおりです。

マスター ブート レコードのブートローダー:

[BITS 16] ; 16 bit mode
[ORG 0x7C00] ; Boot loader start address

Boot:
    ; Initial, dl contains drive number
    ; Set data segment to code segment
    mov ax, cs
    mov ds, ax
    mov es, ax
    ; Set the stack segment to 0xA000
    add ax, 0xA000
    mov ss, ax
    mov sp, 0x00
    ; Reset the drive, dl contains drive number
    mov ah, 0x00
    int 0x13
    ; Read from drive, dl contains drive number
    ;     Set up output location to 0x7E00: 0x00
    mov ax, 0x7E00
    mov es, ax ; Load to 0x7E00 : 0x00
    mov bx, 0x00
ReadDrive:
    mov ah, 0x02
    mov al, 0x01 ; Read 1 sector
    mov ch, 0x00 ; Read on cylinder 0
    mov cl, 0x02 ; Read sector 2
    mov dh, 0x00 ; Head number 0
    int 0x13

    jnc Success
    ; Print error (character F)
    mov al, 0x46
    call PrintChar
    jmp ReadDrive ; Retry

PrintChar: ; Prints a single character
    pusha
    mov ah, 0x09
    mov bh, 0x00
    mov bl, 0x0F
    mov cx, 0x01
    int 0x10
    popa
    ret

Success:
    jmp 0x7E00:0x00 ; Jump to 2nd stage bootloader

TIMES 510 - ($ - $$) db 0
DW 0xAA55 ; Boot signature

第 2 段階のブートローダーのコード:

[BITS 16]
[ORG 0x7E00]

Boot2:
    ; Prints the character S to the screen
    mov al, 0x53
    mov ah, 0x09
    mov bh, 0x00
    mov bl, 0x0F
    mov cx, 0x01
    int 0x10
    jmp $ ; Loop forever

TIMES 512 - ($ - $$) db 0 ; Fill rest of block

このコードは、次のコードを使用してコンパイルされ、ドライブに書き込まれました。

nasm boot.asm -o boot.bin -f bin
nasm boot2.asm -o boot2.bin -f bin
dd if=boot.bin of=/dev/sd3 bs=512
dd if=boot2.bin of=/dev/sd3 bs=512 seek=1

このコードが書き込まれたデバイスは、16 GB の USB ドライブでした。このコードの起動に使用したコンピューターは、USB からの起動をサポートしており、他のハード ドライブと同じように起動します。コードが実行されないように見える理由は何ですか?

4

1 に答える 1