前回やったこと
・16進数をバイナリエディタで打ちこんだ。
・アセンブラで「hello world」を出した。
詳しくは前回の記事 https://qiita.com/gorira_tatsu/items/0b5aec93aa74a8c89107
記事書き出したけど、自分の振り返りみたいに書いていくから理解が深まるね〜
さて開発再開
helloos.nas
; hello-os
; TAB=4
ORG 0x7c00 ; このプログラムがどこに読み込まれるのか
; 以下は標準的なFAT12フォーマットフロッピーディスクのための記述
JMP entry
DB 0x90
〜中略〜
; プログラム本体
entry:
MOV AX,0 ; レジスタ初期化
MOV SS,AX
MOV SP,0x7c00
MOV DS,AX
MOV ES,AX
MOV SI,msg
putloop:
MOV AL,[SI]
ADD SI,1 ; SIに1を足す
CMP AL,0
JE fin
MOV AH,0x0e ; 一文字表示ファンクション
MOV BX,15 ; カラーコード
INT 0x10 ; ビデオBIOS呼び出し
JMP putloop
fin:
HLT ; 何かあるまでCPUを停止させる
JMP fin ; 無限ループ
msg:
DB 0x0a, 0x0a ; 改行を2つ
DB "hello, world"
DB 0x0a ; 改行
DB 0
RESB 0x7dfe-$ ; 0x7dfeまでを0x00で埋める命令
DB 0x55, 0xaa
; 以下はブートセクタ以外の部分の記述
DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
RESB 4600
DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
RESB 1469432
意味不明なプログラム本体について読み解いて行きます。今回は新出命令がたくさんありますね〜
最初はORG命令です。これは機械語が実行時にpcメモリのどこに読み込まれるかをnaskに教えてあげる命令です。ちなみにORG命令の元になった英語は「origin」で、意味は開始点です。ここからプログラムが始まるよー、ちなみにここはメモリのどこどこに読み込まれるんだよー、そう言う事だからnaskよろしくねー。的な?(ほとんど丸写し)
その次に出てくるのはJMP命令です。これはC言語で言う所のgoto文らしいけど知らんがな。元になった英語は「jump」です。簡単簡単。
その次がentry:で、これがラベルの宣言らしい。JMP命令の飛び先の指定などに使います。C言語とよく似ているらしい。ちなみにentryは「入り口」という意味らしい。あー全然頭に入って来ねえ。
終わり
正直長いのでここら辺で終わらせました。本当に完成できるんですかね???????????
/|_________ _ _
〈 To BE CONTINUED…//// |
\| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄~ ~  ̄