30天自制操作系统Day2
发布时间
阅读量:
阅读量
- 准备环境notepad++
- 指令意思解释
helloos.nas程序如下:
; hello-os
; TAB=4
ORG 0x7c00 ; このプログラムがどこに読み込まれるのか
; 以下は標準的なFAT12フォーマットフロッピーディスクのための記述
JMP entry
DB 0x90
DB "HELLOIPL" ; ブートセクタの名前を自由に書いてよい(8バイト)
DW 512 ; 1セクタの大きさ(512にしなければいけない)
DB 1 ; クラスタの大きさ(1セクタにしなければいけない)
DW 1 ; FATがどこから始まるか(普通は1セクタ目からにする)
DB 2 ; FATの個数(2にしなければいけない)
DW 224 ; ルートディレクトリ領域の大きさ(普通は224エントリにする)
DW 2880 ; このドライブの大きさ(2880セクタにしなければいけない)
DB 0xf0 ; メディアのタイプ(0xf0にしなければいけない)
DW 9 ; FAT領域の長さ(9セクタにしなければいけない)
DW 18 ; 1トラックにいくつのセクタがあるか(18にしなければいけない)
DW 2 ; ヘッドの数(2にしなければいけない)
DD 0 ; パーティションを使ってないのでここは必ず0
DD 2880 ; このドライブ大きさをもう一度書く
DB 0,0,0x29 ; よくわからないけどこの値にしておくといいらしい
DD 0xffffffff ; たぶんボリュームシリアル番号
DB "HELLO-OS " ; ディスクの名前(11バイト)
DB "FAT12 " ; フォーマットの名前(8バイト)
RESB 18 ; とりあえず18バイトあけておく
; プログラム本体
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
其中:
DB:(data byte)写入一字节数据
DW:(data word)写入两字节数据
RESB:(reserve byte)释放字节
DD:(data double-word)写入四个字节
ORG: 程序的起始内存地址
JMP:相当于goto,跳转指令
MOV: 如 MOV a 1, 即把1赋值给a
INT: INT func,即终端当前程序,跳转至func函数
HLT: 结束程序,cpu待机
CMP: 比较指令,CMP a b,a与b进行比较
JE: 若比较结果相等,JE func,跳转至func函数
ADD: 加法运算,ADD a 1,给a加1
命令解释:
数据大小 [地址]
如MOV BYTE [255] ,123 指令是用“255”号地址保存“123”这个数值
利用make指令执行makefile文件内的命令
makefile文件内容如下:
其中img 、asm、run、install均为命令语句,下一行则为打开指定位置的程序,利用make.exe执行命令,相当于在Day1中输入的分散指令集中至makefile文件中,输入make run指令后,会调用img命令,生成helloos.img,随后把helloos.img复制至fdimage0.bin下,最后打开模拟器,显示hello world。
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
img:
../z_tools/make.exe -r helloos.img
asm:
../z_tools/make.exe -r ipl.bin
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/iimgtol.com w a:helloos.img
运行结果:

全部评论 (0)
还没有任何评论哟~
