yokobuttonの不定期で競技プログラミングをするブログ

不定期で解けた競技プログラミングコンテストの問題を載せています。

「作って理解するOS」でmingw-w64用のプログラムを書いてみた

 「作って理解するOS」という書籍はNASMでプログラムが書かれているのですが、そのプログラムをmingw-w64用に書いてみたという記事です。

 まだ14章12節までしかプログラムをしていないのですが、最初のブートプログラムをイメージファイルにする箇所に時間がかかったので、参考として記事に残しておきます。

 コマンドと単純なブートプログラムだけを記事に書きます。ちなみにコマンドはwindowsを想定しています。

 

コマンドは下の3つを順番に実行してください。

c:\mingw64\bin\as.exe boot.s -o boot.o -a > boot.lst
c:\mingw64\bin\ld.exe boot.o -o boot.tmp -Ttext=0x7c00 -T NUL
c:\mingw64\bin\objcopy.exe -O binary boot.tmp boot.img

 

Aという出力をするブートプログラムを下に載せます。

// boot.s
  .code16
  .equ boot_load,0x7c00
  .equ start_load,0x0000
  .org start_load
entry:
  jmp ipl
bpb:
  .fill 90-(.-entry),1,0x90
ipl:
  cli

  movw $0x0000,%ax
  movw %ax,%ds
  movw %ax,%es
  movw %ax,%ss
  movw boot_load,%sp

  sti

  movb %dl,boot_drive

  movb $'A',%al
  movb $0x0e,%ah
  movw $0x0000,%bx
  int $0x10

  jmp .

.balign 2
boot_drive:
  .word 0x0000

  .fill 510-(.-entry),1,0x00
  .byte 0x55
  .byte 0xaa