{{category SourceCode,Assembler,nolink}}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からブートすると、起動してメッセージを表示する。そして、何かキーを押すとリブートします。 {{code Text,4, ;********************************************************** ; ブートセクタプログラム ;********************************************************** .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 ;********************************************************** }}