トップ 履歴 一覧 カテゴリ ソース 検索 ヘルプ RSS ログイン

Source/Asm/BootSector

INDEX

i386ブートセクタプログラム一例

ブートセクタプログラム

i386 PC-AT互換機のブートセクタプログラムです。ブートセクタプログラムは16bitで動きますので、16bitのプログラムを作成します。

ブートセクタプログラムは 0000:7C00H にロードされて実行されます。そのため、7C00H ローカルなプログラムをつくなければなりません。ジャンプ命令はすべて near ジャンプにして絶対アドレスにアクセスする場合は、7C00h を足してアクセスします。またブートセクタの最後のワードには AA55H をセットします。

注意:この方法で作成したブートセクタプログラムをFDに書き込むと、FATなどとフォーマットが異なるのでFDが読み込めなくなります。バックアップを取るか、フォーマットしてもよいディスクを使用してください。全て自己責任で行ってください。

 作成手順

アセンブラをコンパイルし、16bitリンカでバイナリ作成、BIN化して、FDに書き込み。

C:\>C:\masm32\bin\ML.EXE /c boot.asm
C:\>D:\BootSector\LINK.EXE boot.obj
C:\>exe2bin boot.exe

起動してリブート

FDからブートすると、起動してメッセージを表示する。そして、何かキーを押すとリブートします。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
;**********************************************************
; ブートセクタプログラム
;**********************************************************

.486

START   = 7c00h

TEXT    segment byte public use16

    jmp     short   BootProg

    org     0030h
BootProg:
    cld
    cli
    xor     ax, ax
    mov     ds, ax
    mov     ss, ax
    mov     sp, 7c00h

    sti
    mov     ax, 0003h
    int     10h

    xor     bx, bx
    lea     si, BootMsg1 + START
    mov     ah, 0eh
    call    PrintStr        ; 文字列表示
    lea     si, BootMsg2 + START
    call    PrintStr        ; 文字列表示

    xor     ax, ax
    int     16h             ; キーボード入力

    int     19h             ; リブート

PrintStr:
    lodsb
    or      al, al          ; AL = 0 ?
    je      short   Return
    int     10h
    jmp     short   PrintStr
Return:
    ret

    org 0100h
BootMsg1    db      "Boot Message", 0dh, 0ah, 0
BootMsg2    db      "Hit any key to reboot...", 0dh, 0ah, 0

    org     0200h - 2
    dw      0aa55h
TEXT    ends
end
;**********************************************************
; EOF
;**********************************************************

最終更新時間:2008年11月18日 00時05分00秒 指摘や意見などあればSandBoxのBBSへ。