日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

30天自制操作系统读书笔记(三)

發布時間:2024/5/15 windows 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 30天自制操作系统读书笔记(三) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

來吧。第三天。

制作真正的IPL:

????????

?

作者又是那樣,一上來就甩一堆代碼,用他的話猜測,下面這段代碼應該是用來裝載下一個512字節的內容的。

MOV AX,0x0820MOV ES,AXMOV CH,0 ; 柱面0MOV DH,0 ; 磁頭0MOV CL,2 ; 扇區2MOV AH,0x02 ; AH=0x02 : 讀盤MOV AL,1 ; 1個扇區MOV BX,0MOV DL,0x00 ; A驅動器INT 0x13 ; 調用磁盤biosJC error

?

好吧,作者在代碼后面稍微解釋了一下:

?

調用了13號中斷,mov入ch,dh等寄存器的數據原來就是這個個斷函數需要傳遞進入的參數。

?

那么什么是扇區,什么是柱頭呢? 看圖吧!

?

含有IPL的啟動區,位于C0-H0-S1(柱面0,磁頭0,扇區1),下一個扇區是C0-H0-S2

所以上面那段程序就是裝載這個扇區。

?

既然讀取了數據,那就要放到內存里啊,否則讀取出來有什么用?但是我們怎么指定放入哪里呢?其實這個地址已經指明了。? ES:BX 就是要載入的地址。也就是0x8200-0x83ff

但是為什么不放入0x8000呢,作者說是留給啟動區的(啟動區不是7c00-7dff嗎?什么鬼!)

?

?

作者又添加了循環寫入的代碼。

利用bios程序錯誤時在flags里返回的數據。

?

看注釋吧。。

??

MOV AX,0x0820MOV ES,AXMOV CH,0 ; 柱面0MOV DH,0 ; 磁頭0MOV CL,2 ; 扇區2readloop:MOV SI,0 ;用來記錄失敗次數的寄存器retry: MOV AH,0x02 ; AH=0x02 : 讀盤MOV AL,1 ; 1個扇區MOV BX,0MOV DL,0x00 ; A驅動器INT 0x13 ; 調用磁盤biosJNC fin ;如果沒有出錯就跳轉到nextADD SI,1 ;錯誤次數加一CMP SI,5 ;和5對比JAE error ;大于等于5就跳轉MOV AH,0x00 ;這一句不懂MOV DL,0X00INT 0X13JMP retry

?

? ? ?

?

?

?

Omg,這一章難道全是匯編代碼了嗎?

作者一鼓作氣讀了10個柱頭。

?

?

總于開始著手操作系統的開發了嗎?

?

Fin:

???????? HTL

???????? JMP fin

?

什么,,難道這只是一個只會待機的操作系統???

但是怎么運行他呢?

讓我們來看看makefile里面的修改吧:

?

haribote.img : ipl.bin haribote.sys Makefile

???????? $(EDIMG)?? imgin:../z_tools/fdimg0at.tek \

?????????????????? wbinimg src:ipl.bin len:512 from:0 to:0 \

?????????????????? copy from:haribote.sys to:@: \

?????????????????? imgout:haribote.img

?

其中haribote.sys就是 haribote.nas經過nask編譯后的文件。

雖然不是很懂makefile里面的這些代碼,但應該就是將系統保存到了我們的img磁盤映像里了。

?

或許這樣太抽象那就理解為這樣好了:

???????? 我將磁盤映像寫入到了硬盤了。然后將haribote.sys復制到硬盤里了,然后我又把硬盤做成了硬盤鏡像。

?

?

作者說 0x002600保存的是文件名

???????? ?? 0x002400保存的是文件內容。那就相信他吧。

那么啟動這個操作系統就簡單了。

?

我們根據計算,磁盤上的內容加載到0x8000那么磁盤0x4200處就對應著內存里的0xc200.

但是我又不懂了。

不是只需要在IPL里jmp一下就好了嗎?

為什么又來個ORG 0xc200??

好吧,博主表示搞不懂這里。

?

?

索性不管它了。

?

作者自稱現在程序的前半部分是用匯編寫的,后半部分是C語言寫的。

所以啊,又來了一次大跳躍,扔給我們一個 asmhead.nas

這到底是什么鬼。

?

不管了,先來看看C語言這個部分吧。

那么C語言怎么變成機器語言呢?

好麻煩。。。。。還好他把一系列過程寫到了makefile里面。

?

?

?

體系結構好像有點復雜啊。博主盜了一張圖:

?

?

?

?

好像放著naskfunc不講,有點過不去啊,其實就是有些東西C語言實現不了,使用匯編寫,然后編譯的時候,把naskfunc鏈接到一起。

?

;naskfunc

;TAB=4

?

[FORMAT "WCOFF"] ;制作目標文件的模式

[BITS 32]?????????? ;制作32位模式用的機械語言

?

;制作目標文件的信息

[FILE "naskfunc.nas"] ;源文件名信息

???????? GLOBAL _io_hlt;程序中包含的函數名?? 想在C語言中使用必須用global聲明

?

;以下是實際的函數

[SECTION .text]???? ;目標文件中寫了這些之后再寫程序

?

_io_hlt:??? ;void io_hlt(void);? 要用_開頭

???????? HLT

???????? RET

轉載于:https://www.cnblogs.com/You0/p/4432252.html

總結

以上是生活随笔為你收集整理的30天自制操作系统读书笔记(三)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。