前言
實現(xiàn)一個最簡單的操作系統(tǒng)Hello World,要使用匯編語言蛮位,模擬操作系統(tǒng)啟動盤是軟盤穷吮。
題外話:為啥Windows系統(tǒng)C盤是系統(tǒng)盤严蓖,因為計算機誕生的時代是沒有硬盤的薄嫡,只有軟盤,A是3.5寸軟盤颗胡,B是5.3寸軟盤毫深,隨著硬盤的發(fā)明,只能向后排為C杭措。
正文
軟盤啟動匯編代碼
; hello-os
; TAB=4
ORG 0x7c00 ; 這個程序要讀取到哪里费什?
; 以下是標(biāo)準(zhǔn)FAT 12格式軟盤的描述
JMP entry
DB 0x90
DB "HELLOIPL" ; 可以自由寫引導(dǎo)扇區(qū)的名字(8字節(jié))
DW 512 ; 一個扇區(qū)的大屑鼗帧(必須是512)
DB 1 ; 集群大惺炙亍(必須是一個扇區(qū))
DW 1 ; FAT從哪里開始(一般從第一扇區(qū)開始)
DB 2 ; FAT的個數(shù)(必須為2)
DW 224 ; 根目錄區(qū)域的大小(通常為224個條目)
DW 2880 ; 該驅(qū)動器的大写耱健(必須是2880扇區(qū))
DB 0xf0 ; 磁盤的類型(必須為0xf0)
DW 9 ; FAT區(qū)域的長度(必須是9個扇區(qū))
DW 18 ; 一輛磁道(track)上有幾個扇區(qū)(必須要18個扇區(qū))
DW 2 ; 磁頭的數(shù)量(必須是2)
DD 0 ;因為沒有使用分區(qū)泉懦,所以這里必須是0
DD 2880 ; 再寫一次這個驅(qū)動器的大小
DB 0,0,0x29 ; 定義不清楚,必須為0
DD 0xffffffff ; (可能是)卷標(biāo)號碼
DB "HELLO-OS " ; 磁盤的名稱(11個字節(jié))
DB "FAT12 " ; 先空出18個字節(jié)
RESB 18 ; とりあえず18バイトあけておく
; 程序主體
entry:
MOV AX,0 ; accumulator疹瘦,累加寄存器初始化
MOV SS,AX ;16位段寄存器初始化崩哩,作用是存放當(dāng)前堆棧段的段地址,一般和SP連用
MOV SP,0x7c00 ;stack pointer,棧指針寄存器
MOV DS,AX ;16為段寄存器, 作用是存放當(dāng)前數(shù)據(jù)段的段地址
MOV ES,AX ;ES(Extra Segment) 段寄存器的
MOV SI,msg ;