30日でできるOS自作入門【2日目】
概要
これはMozyの1人アドベントカレンダー 2018 の2日目の記事です。
書こうとした経緯は、こちら
今日の内容
- helloosをアセンブラで作り直してみる
今日やったこと
昨日はバイナリエディタでosが起動し、hello worldを出力するまでのファイルを作りました。
今日はアセンブラで再実装してみます。
最初は、DB命令のみで18万行を超える物を書こうかなと思ったけど、やめましたw
なので、RESB命令も使った helloos.nasを作ってみます。
使うのは、この本の著者の方が作った、NASM(なすむ) というアセンブラです。
22行になって短くなりましたね!
DB 0xeb, 0x4e, 0x90, 0x48, 0x45, 0x4c, 0x4c, 0x4f DB 0x49, 0x50, 0x4c, 0x00, 0x02, 0x01, 0x01, 0x00 DB 0x02, 0xe0, 0x00, 0x40, 0x0b, 0xf0, 0x09, 0x00 DB 0x12, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00 DB 0x40, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x29, 0xff DB 0xff, 0xff, 0xff, 0x48, 0x45, 0x4c, 0x4c, 0x4f DB 0x2d, 0x4f, 0x53, 0x20, 0x20, 0x20, 0x46, 0x41 DB 0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 0x00, 0x00 RESB 16 DB 0xb8, 0x00, 0x00, 0x8e, 0xd0, 0xbc, 0x00, 0x7c DB 0x8e, 0xd8, 0x8e, 0xc0, 0xbe, 0x74, 0x7c, 0x8a DB 0x04, 0x83, 0xc6, 0x01, 0x3c, 0x00, 0x74, 0x09 DB 0xb4, 0x0e, 0xbb, 0x0f, 0x00, 0xcd, 0x10, 0xeb DB 0xee, 0xf4, 0xeb, 0xfd, 0x0a, 0x0a, 0x68, 0x65 DB 0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x77, 0x6f, 0x72 DB 0x6c, 0x64, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00 RESB 368 DB 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xaa DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 RESB 4600 DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 RESB 1469432
ハマりポイント
最初に18万行を書こうと思い立って、さすがにむりやと気付いた部分w
知ったこと
DB命令とは
- data byte の略
- つまりファイルの内容を1バイトだけ直接書く命令です
- このDB命令さえあればどんなデータもどんなプログラムも記述できる
- そんな訳でアセンブラに作れないファイルはない
RESB命令とは
- reserve byte の略
- とりあえずここに10バイトほど開けておいてくださいという意味で
- RESB 10 のようにつかう
- こう書いたら10バイトは予約済みとなる
- 今回は単に開けておくだけではなく、開けた部分を 0x00 で埋める用途で使っている
- そのためこの命令のおかげで18万行も書かなくてすむようになった ( スゴイ
- 最後の行 RESB 1469432 は圧巻だよね