あんたいとる

無駄の中に宝がある!

30日でできる! OS自作入門(二日目)

アセンブラ学習とMakefile入門

新しく学んだ知識

命令について

命令  説明
ORG  機械語が実行時にPCのメモリ読み込まれることになるかを教えてくれる
JMP 指定した場所にジャンプする
[word]: ラベルの宣言。JMP命令の飛び先の指定などに使う。[word]の部分には任意の単語を使用できる。
MOV 代入。MOV AX, 0 はAXに0を代入という意味。

レジスタについて

レジスタ  説明
AX アキュムレータ(accumulator:累積演算機という意味)
CX カウンタ(counter:数を数える機会という意味
DX データ(data:データという意味)
BX ベース(base:土台とか基点という意味)
SP  スタックポインタ(stack pointer:スタック用ポインタ)
BP ベースポインタ(base pointer:ベース用ポインタ)
SI ソースインデックス(source index:読み込みインデックス)
DI デスティネーションインデックス(destination index:書込みインデックス)
ES エクストラセグメ(extra segment:おまけセグメント)
CS コードセグメント(code segment)
SS スタックセグメント(stack segment)
DS データセグメント(data segment)
FS 本名なし(おまけセグメント2)
GS 本名なし(おまけセグメント3)

※AXなどXで終わるレジスタは16bit。上位8bitはAH、下位8bitはALと指定する。B~Dのレジスタも同様。
※32bitレジスタの場合は先頭にEが付く。EAXなど

プログラムの解説

プログラム 解説
MOV AL,[SI] ALレジスタにSIレジスタが指すメモリの内容を代入
MOV BYTE [687],123 メモリアドレス687に、123を代入(BYTEは8bitを表す)
MOV WORD [687],123 メモリアドレス687に、123を代入(WORDは16bitを表すため、8bitずつ687と688に代入される)
ADD SI, 1 SIレジスタに1を足す
CMP AL, 0 ALレジスタと0を比較する
JE fin 比較の結果が等しければfinにジャンプ
INT 0xNN ソフトウェア割込み。
HLT CPUを停止(待機状態に)する)
Makefileの書き方について
ipl.bin : ipl.nas Makefile
    ../z_tools/make.exe ipl.nas ipl.bin ipl.lst
用語  説明
ターゲット名 ipl.binの部分。"make ターゲット名" という形で使う
依存ファイル "ips.nas Makefile"の部分。ターゲットをmakeするときに必要なファイル。"ターゲット名:"の後にスペース区切りで記述する。
コマンド "../z_tools~"の部分。実行するコマンドを記述する

makeコマンドのオプション

オプション 説明
-r 組み込みの暗黙的ルールを使用しない。 また、添字規則で使うデフォルトの添字のリストも全て消去する。
-C dir makefile を読み込むなどの動作の前に、ディレクトリ dir に移動します

2日目感想

まだついていけている感じ。INT命令のところを詳しく知りたい。