[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
.code16 .text jmp entry .byte 0x90 .ascii "HELLOIPL" # ブートセクタの名前 .word 512 # 1セクタの大きさ .byte 1 # クラスタの大きさ .word 1 # FATがどこから始まるか .byte 2 # FATの個数 .word 224 # ルートディレクトリのサイズ .word 2880 # このドライブの大きさ .byte 0xf0 # メディアのタイプ .word 9 # FAT領域の長さ .word 18 # 1トラックにいくつのセクタがあるか .word 2 # ヘッドの数 .int 0 # 必ず0 .int 2880 # ドライブのサイズ .byte 0, 0, 0x29 .int 0xffffffff # ボリュームシリアル番号 .ascii "HELLO-OS " # ディスクの名前 .ascii "FAT12 " # フォーマットの名前 .skip 18, 0x00 # 18バイト空ける # プログラム本体 entry: movw $0, %ax # レジスタ初期化 movw %ax, %ss movw $0x7c00, %sp movw %ax, %ds movw %ax, %es movw $msg, %si putloop: movb (%si), %al addw $1, %si cmpb $0, %al je fin movb $0x0e, %ah # 一文字表示BIOSコール movw $15, %bx # カラーコード int $0x10 # ビデオBIOS呼び出し jmp putloop fin: hlt jmp fin .data msg: .string "Hello, world!\n"まずは、コメントがついてなかったので、すべてつけました。
OUTPUT_FORMAT("binary"); IPLBASE = 0x7c00; SECTIONS { . = IPLBASE; .text : {*(.text)} .data : {*(.data)} . = IPLBASE + 510; .sign : {SHORT(0xaa55)} }2行目に、IPLBASEという変数を定義します。
IMG=os.img IPL=ipl.bin all : ipl.s make ipl make img make run os.img : $(IPL) mformat -f 1440 -C -B $(IPL) -i $(IMG) :: ipl.bin : ipl.s ipl.ls gcc ipl.s -nostdlib -Tipl.ls -o $(IPL) run : $(IMG) qemu -m 32 -localtime -vga std -fda $(IMG) ipl :; make ipl.bin img :; make os.imgファイル名は以下のようになっています。
COMMENT