OS自作入門二日目のまとめ
自分のためのまとめなので、他の人には意味不かも。
アセンブラ
- ORG
- origin , naskにこの機械語が実行時にPCのメモリのどこに読み込まれるのかを教える命令。PC/AT互換機では
0x00007c00 - 0x00007dff : ブートセクタが読み込まれるアドレス
- となっているのでこれに従って書かれている。
- JMP
- jump , 見てのとおりジャンプ。ラベルに飛ぶ。
- MOV
- move , 代入。
MOV AX,0
- の様に使う。これは
AX に 0を代入
- する操作。
- INT 0x10
- interupt , 割り込み。割り込み番号10はビデオbios呼び出し。それぞれ必要なレジスタを設定してから呼び出すと値によってビデオ関係の様々な設定が行える。
レジスタ(16bit)
- AX
- accumulator , AH , ALに分かれている。各種演算向き。
- CX
- counter , CH , CLに分かれている。カウンタ用。
- DX
- date , DH , DLに分かれている。
- BX
- base , BH , BLに分かれている。メモリの番地計算用。
- SP
- stack pointer ,分かれていない。
- BP
- base pointer ,分かれていない。
- SI
- source index ,分かれていない。
- DI
- destination index ,分かれていない。
レジスタ(32bit)
- EAX
- ECX
- EDX
- EBX
- ESP
- EBP
- ESI
- EDI
- extend , 上位と下位に一応別れているが、明示的に使用できるのは下半分。
セグメントレジスタ
- ES
- extra segment
- CS
- code segment
- SS
- stack segment
- DS
- date segment
- FS
- GS
ラベルの代入
MOV SI,msg
labelの代入は番地の代入と同じ。
メモリ上の番地
[SI]
の様に書くと、それはメモリ上の番地を表す。
MOV BYTE [678], 123
と書くと、687番地(1byte)に123を2進数に直して格納する。
MOV WORD [678], 123
と書くと、678番地と679番地(合わせて2byte)に123を2進数に直した上位8bitを679番地に、下位8bitを678番地に格納する。
Makefile
こんな感じ。っていうかそのまま。書いたことほとんどないので、理解は出来るけどかけないと思う。-rってなんのオプション?
# デフォルト動作
default :
../z_tools/make.exe img
# ファイル生成規則
ipl.bin : ipl.nas Makefile
../z_tools/nask.exe ipl.nas ipl.bin ipl.lst
helloos.img : ipl.bin Makefile
../z_tools/edimg.exe imgin:../z_tools/fdimg0at.tek \
wbinimg src:ipl.bin len:512 from:0 to:0 imgout:helloos.img
# コマンド
asm :
../z_tools/make.exe -r ipl.bin
img :
../z_tools/make.exe -r helloos.img
run :
../z_tools/make.exe img
copy helloos.img ..\z_tools\qemu\fdimage0.bin
../z_tools/make.exe -C ../z_tools/qemu
install :
../z_tools/make.exe img
../z_tools/imgtol.com w a: helloos.img
clean :
-del ipl.bin
-del ipl.lst
src_only :
../z_tools/make.exe clean
-del helloos.img
おしまい。
疲れた。
最終更新:2007年06月22日 17:11