第一天
光盘地址用的这个:30天自制操作系统光盘 - 夕雨714 - 博客园 (cnblogs.com)
Bz162下载地址:Bz - c.mos (vcraft.jp)
启动方式:D:\文档\学习科目\计算机基础\操作系统\操作系统实验\30dayMakeOS\1_day\tolset\helloos0 目录下打开!cons_nt.bat cmd中输入run
2C 逗号,20 空格,0A 换行
OS made by BUPT LanYi
4F 53 20 6D 61 64 65 20 62 79 20 42 55 50 54 20 4C 61 6E 59 69 0A
共22组
经过简化,可以在helloos2中的helloos.nas文本中更改
再用一下命令生成img文件,再run
…\z_tools\nask.exe helloos.nas helloos.img
效果图跟上图一样
目前helloos2中为os
第二天
helloos.nas
; hello-os
; TAB=4
ORG 0x7c00 ; 装载地址,也就是程序的开头,引导扇区被读取的地址,IBM规定的
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加一
CMP AL,0
JE fin
MOV AH,0x0e ; 显示一个文字
MOV BX,15 ; 指定字符颜色
INT 0x10 ; 软件中断指令,调用显卡BIOS,使用16号函数
JMP putloop
fin:
HLT ; 停止CPU,等待指令
JMP fin ; 无限循环
msg: ; 显示信息部分
DB 0x0a, 0x0a ; 换行两次
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
nask:汇编编译器的一种
文件更改:ipl.nas用来作为启动区
asm
makeimg
run
makefile
# Makefile文件
# 定义文件生成规则,是高级的批处理命令文件
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 : # 调用clean命令的同时删除img
../z_tools/make.exe clean
-del helloos.img
第三天
IPL: initial program loader 启动区,启动程序装载器
BIOS的0x13函数
- AH = 0x02; (読み込み時)
- AH = 0x03; (書き込み時)
- AH = 0x04; (ベリファイ時)
- AH = 0x0c; (シーク時)
- AL = 処理するセクタ数; (連続したセクタを処理できる)
- CH = シリンダ番号 & 0xff;
- CL = セクタ番号(bit0-5) | (シリンダ番号 & 0x300) >> 2;
- DH = ヘッド番号;
- DL = ドライブ番号;
- ES:BX = バッファアドレス; (ベリファイ時、シーク時にはこれは参照しない)
- 返回值,即进位标志:
- FLAGS.CF == 0 : エラーなし、AH == 0
- FLAGS.CF == 1 : エラーあり、AHにエラーコード(リセットファンクションと同じ)
; harib00b/ipl.nas与昨天不同的部分
MOV AX,0x0820
MOV ES,AX
MOV CH,0 ; 柱面0
MOV DH,0 ; 磁头0
MOV CL,2 ; 扇区2
MOV AH,0x02 ; AH=0x02 : 读盘
MOV AL,1 ; 1个山区
MOV BX,0
MOV DL,0x00 ; 驱动器号
INT 0x13 ; 调用BIOS19号函数
JC error ; 进位标志如果是1的话,就跳转
与光盘不同,软盘磁盘两面都能记录数据
软式磁盘驱动器则称FDD,软盘片是覆盖磁性涂料的塑料片,用来储存数据文件,磁盘片的容量有5.25”的1.2MB,3.5”的1.44MB。
以3.5”的磁盘片为例,其容量的计算如下:
80(磁道)x18(扇区)x512 bytes(扇区的大小)x2(双面) = 1440 x1024 bytes = 1440 KB = 1.44MB
3.5英寸软盘片,其上、下两面各被划分为80个磁道,每个磁道被划分为18个扇区,每个扇区的存储容量固定为512字节。
段寄存器:
不管要指定内存的什么地址都必须同时指定段寄存器,默认为段寄存器DS,故DS必须预先指定为0,否则地址会加上这个数的16倍
make run
; 03_day/harib00b
entry:
MOV AX,0 ; 儗僕僗僞弶婜壔
MOV SS,AX
MOV SP,0x7c00
MOV DS,AX
; 僨傿僗僋傪撉傓
MOV AX,0x0820
MOV ES,AX
MOV CH,0 ; 僔儕儞僟0
MOV DH,0 ; 僿僢僪0
MOV CL,2 ; 僙僋僞2
MOV SI,0 ; 记录失败次数的寄存器
retry:
MOV AH,0x02 ; AH=0x02 : 僨傿僗僋撉傒崬傒
MOV AL,1 ; 1僙僋僞
MOV BX,0
MOV DL,0x00 ; A僪儔僀僽
INT 0x13 ; 僨傿僗僋BIOS屇傃弌偟
JNC fin ; 没出错的话跳转到fin
ADD SI,1 ; 往SI加1
CMP SI,5 ; 比较SI和5
JAE error ; SI >= 5 跳转error
MOV AH,0x00
MOV DL,0x00 ; A僪儔僀僽
INT 0x13 ; 重置驱动器
JMP retry
到目前还挺简单的,但是得补编译原理、数据库作业去了,感觉第三天内容好像挺多
欢迎关注B站账号,会发一些深度强化学习的学习资料
B站账号:哔哩哔哩 无名-易
Gitee账号:gitee账号
GitHub账号:GitHub