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
- アセンブラ ⇒ http://www.masm32.com/
- 16bitリンカ ⇒ ftp://ftp.microsoft.com/softlib/mslfiles/lnk563.exe
起動してリブート
FDからブートすると、起動してメッセージを表示する。そして、何かキーを押すとリブートします。
1 |
;**********************************************************
; ブートセクタプログラム
;**********************************************************
.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へ。