OS自作入門 2日目
○二日目
アセンブラ学習とMakefile入門
▼アセンブラ
ORG命令 読み込まれるメモリの番地を指定する。
JMP命令 飛び先を指定してジャンプする。
ラベルを指定した場合はラベルから実行される。(ラベルはプログラムのアドレスを指す。)
MOV命令 代入命令。値、ラベル、レジスタを指定する。
ADD命令 足し算命令。
CMP命令 比較命令。
JE命令 条件ジャンプ命令。条件を満たす場合はジャンプする。
INT命令 ソフトウェア割り込み命令。BIOSの関数を呼び出す。
※[]を使用するとメモリ上のデータを指定可能。
例 [XX]:XXがアドレスを指定する。
→指定可能なレジスタは「BX,BP,SI,DI」のみ。
▼レジスタ
AX アキュームレータレジスタ(演算レジスタ)
CX カウンタレジスタ
DX データレジスタ
BX ベースレジスタ
SP スタックポインタ
BP ベースポインタ
SI ソースインデックス(読み込みレジスタ)
DI ディスティネーションインデックス(書き込みレジスタ)
※これらは16ビットのレジスタ32ビットのレジスタの場合はそれぞれ「E」を頭につける。
また、AX,CX,DX,BXレジスタはそれぞれAL,AH CL,CH DL,DH BL,BHのように8ビットのHigh-Lowレジスタに割り当てられる。
32ビットレジスタの場合、下位16ビットをAX,CX,DX,BXとして使用できるが上位16ビットを使う場合はビットシフトする必要がある。
▼セグメントレジスタ
ES エクストラセグメント
CS コードセグメント
SS スタックセグメント
DS データセグメント
FS ???
GS ???
※セグメントレジスタは指定しない場合、デフォルトでDS:を指定したことになる。