以上的流程圖為自己理解描繪的,下面的**為《30天自製作業系統》書中的原始碼,我加以注釋
; haribote-ipl
; tab=4
cyls equ 10 ; 定義的常量
org 0x7c00 ; 將程式載入到記憶體的位址
;fat12軟盤的專用格式
jmp entry
db 0x90
db "bluesea " ; 必須為8個位元組的啟動扇區名稱
dw 512 ; 每個扇區的位元組數
db 1 ; 簇的大小(每個簇有多少個扇區)
dw 1 ; fat的起始位置
db 2 ; fat的個數
dw 224 ; 根目錄的大小
dw 2880 ;該磁碟的大小(必須為2880個扇區)
db 0xf0 ; 磁碟種類
dw 9 ;fat長度
dw 18 ; 磁軌含有的扇區個數
dw 2 ; 磁頭數
dd 0 ; 不使用分割槽
dd 2880 ; 重寫一次磁碟大小
db 0,0,0x29;
dd 0xffffffff;
db "hariboteos " ; 磁碟名稱(11位元組)
db "fat12 " ;磁碟格式
resb 18 ; 預留18位元組
; 啟動引導程式入口
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
readloop:
mov si,0 ; si記錄讀取失敗的次數
retry:
mov ah,0x02; ah=0x02 :讀入磁碟
mov al,1 ; 1個扇區
mov bx,0
mov dl,0x00 ; a驅動器
int 0x13 ; 呼叫bios函式
jnc next ; 如果沒有出錯就跳轉到next
add si,1 ; 出錯了,si加1
cmp si,5 ; si與5比較
jae error ; si >= 5 則跳轉到error
mov ah,0x00
mov dl,0x00 ; a驅動器
int 0x13 ; 呼叫bios函式
jmp retry
next:
mov ax,es ; ax作為過渡的暫存器
add ax,0x0020 ; es的值與0x0020相加
mov es,ax ; 相加結果放入es偱偙偆偟偰偄傞
add cl,1 ; cl加1
cmp cl,18 ; cl與18比較
jbe readloop ; 如果cl <= 18 就跳轉readloop
mov cl,1
add dh,1
cmp dh,2
jb readloop ; dh < 2 跳轉readloop讀盤
mov dh,0
add ch,1
cmp ch,cyls
jb readloop ; ch < cyls readloop
; 此處為了haribote.sys 的連線
mov [0x0ff0],ch ; ipl啟動程式載入了的柱面數
jmp 0xc200
error:
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顯示字元函式
jmp putloop
fin:
hlt ;
jmp fin;
msg:
db 0x0a, 0x0a ; 兩個換行符
db "load error"
db 0x0a ; 換行
db 0
resb 0x7dfe-$ ; 保證510,511位元組是55 aa
db 0x55, 0xaa
啟動載入器BootLoader
在嵌入式作業系統中,bootloader是在作業系統核心執行之前執行。可以初始化硬體裝置 建立記憶體空間對映圖,從而將系統的軟硬體環境帶到乙個合適狀態,以便為最終呼叫作業系統核心準備好正確的環境。在嵌入式系統中,通常並沒有像bios那樣的韌體程式 注,有的嵌入式cpu也會內嵌一段短小的啟動程式 因此...
SpringBoot之啟動載入器
在專案啟動的時候做一些初始化工作。component public class firstcommandlinerunner implements commandlinerunner component override 啟動專案,觀察控制台輸出 run firstcommandlinerunner...
tomcat啟動載入
listener的初始化最早,filter次之。他倆的初始化都是在容器啟動完成之前初始化的。servlet沒有初始化,原因是沒有匹配的請求進來。如果想要servlet自動初始化,需要在指定的servlet中配置引數,沒有此標籤,預設啟動時servlet不進行初始化。初始化的順序跟listener f...