1

アセンブリ ブートローダー/MBR でアセンブリ カーネルを起動しようとしています。オフセット 0x7e00 からオフセット 0x8000 (セクター 1) までのカーネルをメモリに読み込んでいます。オフセット 0x7e00 にジャンプします。カーネルにジャンプしないのはなぜですか?

; Boot.asm
[org 0x7c00]
[bits 16]

ReadDisk:
    push ax
    push bx
    push cx
    push dx

    mov bx, 0x0000
    mov es, bx
    mov bx, 0x0000

    mov ah, 0x02
    mov al, 0x01
    mov ch, 0x00
    mov cl, 0x02
    mov dh, 0x00
    mov dl, 0x80
    int 0x13
    jc ReadDisk
    jmp 0x7e00


times 510 - ($ - $$) db 0
dw 0xaa55

~~~~

; Kernel.asm
; Print dot on screen and hang
[org 0x7e00]
[bits 16]

mov ah, 0x0e ; BIOS teletype subfunction
mov al, '.'
int 10h
jmp $ ; hang

times 512 - ($ - $$) db 0 ; Fill sector.

環境: NASM、QEMU、Windows 7 64 ビット。

4

1 に答える 1

2

mov bx, 0x0000あなたの最後のコメントから、私はあなたが問題を解決するために置き換えたものを補うことができません. 解決策は次のとおりです。

mov bx, 0x0000
mov es, bx
mov bx, 0x7E00

BIOS がエラーを報告した場合、際限なく再試行する危険を冒す代わりに、中止する必要があります。できればメッセージ付き。

幸いなことに、シミュレートされた環境でこれらすべてを行っています。それ以外の場合は、最初のハードディスク ( mov dl, 0x80) をいじるのは決して良い考えではありません。

于 2015-07-12T20:11:26.027 に答える