30天自制操作系统——第一天到第二天
第一天
光盤地址用的這個: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=4ORG 0x7c00 ; 裝載地址,也就是程序的開頭,引導扇區被讀取的地址,IBM規定的JMP entry ; 跳轉DB 0x90DB "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 ; 僷乕僥傿僔儑儞傪巊偭偰側偄偺偱偙偙偼昁偢0DD 2880 ; 偙偺僪儔僀僽戝偒偝傪傕偆堦搙彂偔DB 0,0,0x29 ; 傛偔傢偐傜側偄偗偳偙偺抣偵偟偰偍偔偲偄偄傜偟偄DD 0xffffffff ; 偨傇傫儃儕儏乕儉僔儕傾儖斣崋DB "HELLO-OS " ; 僨傿僗僋偺柤慜乮11僶僀僩乯DB "FAT12 " ; 僼僅乕儅僢僩偺柤慜乮8僶僀僩乯RESB 18 ; 偲傝偁偊偢18僶僀僩偁偗偰偍偔; 僾儘僌儔儉杮懱entry:MOV AX,0 ; 初始化寄存器MOV SS,AXMOV SP,0x7c00 ; 棧指針寄存器MOV DS,AXMOV ES,AXMOV SI,msg ; 源變址寄存器 putloop:MOV AL,[SI] ; ADD SI,1 ; SI加一CMP AL,0JE finMOV 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 0RESB 0x7dfe-$ ; 0x7dfe傑偱傪0x00偱杽傔傞柦椷DB 0x55, 0xaa; 埲壓偼僽乕僩僙僋僞埲奜偺晹暘偺婰弎DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00RESB 4600DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00RESB 1469432bios網頁:(AT) BIOS - os-wiki (osask.jp)
內存分布圖(AT)memorymap - os-wiki (osask.jp)
nask:匯編編譯器的一種
文件更改:ipl.nas用來作為啟動區
asm makeimg runmakefile
# Makefile文件 # 定義文件生成規則,是高級的批處理命令文件default : # 默認命令../z_tools/make.exe img ipl.bin : ipl.nas Makefile # 檢查有無這兩個文件../z_tools/nask.exe ipl.nas ipl.bin ipl.lsthelloos.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.binimg :../z_tools/make.exe -r helloos.imgrun :../z_tools/make.exe imgcopy helloos.img ..\z_tools\qemu\fdimage0.bin../z_tools/make.exe -C ../z_tools/qemuinstall :../z_tools/make.exe img../z_tools/imgtol.com w a: helloos.imgclean : # 刪除掉中間文件-del ipl.bin-del ipl.lstsrc_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にエラーコード(リセットファンクションと同じ)
與光盤不同,軟盤磁盤兩面都能記錄數據
軟式磁盤驅動器則稱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,AXMOV SP,0x7c00MOV DS,AX; 僨傿僗僋傪撉傓MOV AX,0x0820MOV ES,AXMOV CH,0 ; 僔儕儞僟0MOV DH,0 ; 僿僢僪0MOV CL,2 ; 僙僋僞2MOV SI,0 ; 記錄失敗次數的寄存器 retry:MOV AH,0x02 ; AH=0x02 : 僨傿僗僋撉傒崬傒MOV AL,1 ; 1僙僋僞MOV BX,0MOV DL,0x00 ; A僪儔僀僽INT 0x13 ; 僨傿僗僋BIOS屇傃弌偟JNC fin ; 沒出錯的話跳轉到finADD SI,1 ; 往SI加1CMP SI,5 ; 比較SI和5JAE error ; SI >= 5 跳轉errorMOV AH,0x00MOV DL,0x00 ; A僪儔僀僽INT 0x13 ; 重置驅動器JMP retry
到目前還挺簡單的,但是得補編譯原理、數據庫作業去了,感覺第三天內容好像挺多
歡迎關注B站賬號,會發一些深度強化學習的學習資料
B站賬號:嗶哩嗶哩 無名-易
Gitee賬號:gitee賬號
GitHub賬號:GitHub
總結
以上是生活随笔為你收集整理的30天自制操作系统——第一天到第二天的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 6亿小时,中国短视频APP日均使用时长!
- 下一篇: 使用python爬取斗图网的图片