下面是真機的執行截圖(當然純屬裝逼,哈哈)
下面還是展示ipl10.nas**
; haribote-ipl
; tab=4
cyls equ 10
; 十個柱面
org 0x7c00
; mbr在記憶體中的位置為(ds=0,0x07c00=ds+0x7c00)
; 系統相關設定資訊
jmp entry
db 0x90
db "helloipl"
; name of boot sector
dw 512
; size of sector
db 1
; f dw 1
; fat first sector
db 2
; fat number
dw 224
; root dir size
dw 2880
; disk size in sector
db 0xf0
; disk type
dw 9
; fat length
dw 18
; 18 sector each road
dw 2
; disk up down
dd 0
; no partition
dd 2880
; reclaim the disk size
db 0,0,0x29
; reserve
dd 0xffffffff
; might be column
db "hello-os "
; disk name
db "fat12 "
; disk fs type
resb 18
; reserve 18 byte
; init程式入口
entry:
mov ax,0
; mov ss,ax
mov sp,0x7c00
; heap stack init
mov ds,ax ; 初始化**段的基位址在0x00000
; 讀取磁碟到記憶體0x08200的位置
mov ax,0x0820
mov es,ax
mov ch,0
; cylinder number
mov dh,0
; disk head number
mov cl,2
; sector number
readloop:
mov si,0
; failed times
; retry to read disk if failed, read one sector
retry:
mov ah,0x02
; ah=0x02 : 讀磁碟
mov al,1
; 1扇區
mov bx,0
;mov dl,0x00 ; a驅動器
mov dl,0x80
; 驅動器號很關鍵
int 0x13
; 呼叫bios的函式例程
jnc next
add si,1
cmp si,5
jae error
mov ah,0x00
;mov dl,0x00
mov dl,0x80
; 驅動器號很關鍵
int 0x13
jmp retry
next:
mov ax,es
add ax,0x0020
;每讀取乙個扇區記憶體向後偏移(es+=0x0020)<<4
mov es,ax
add cl,1
cmp cl,62
;62個扇區
jbe readloop
mov cl,1
add dh,1
cmp dh,4
;4磁頭
jb readloop
mov dh,0
add ch,1
cmp ch,4
;4柱面
jb readloop
mov [0x0ff0],ch
jmp0xc200
error:
mov si,msg
jmp putloop
ok:mov si,msg1
putloop:
mov al,[si]
add si,1
; si設定為1
cmp al,0
je fin
mov ah,0x0e
; 在teletype模式下顯示字元
mov bx,15
; 頁碼bh=0x00,前景色bl=0x0f
int 0x10
; bios顯示服務
jmp putloop
fin:
hlt ; 暫停處理器
jmp fin
msg1:
db 0x0a, 0x0a
; 換行符
db "read okkkk"
db 0x0a
; 換行符
db 0
msg:
db 0x0a, 0x0a
; 換行符
db "load error"
db 0x0a
; 換行符
db 0
resb 0x7dfe-$ ; (0x7dfe-當前位置)都填充0x00
db 0x55, 0xaa
學習這本書到目前為止,還是學到了不少東西,其中包括計算機啟動流程、bios中斷向量表,實模式,保護模式,idt,gdt,ldt,tss,記憶體管理,定時器管理(這個主要是依賴時鐘中斷,時鐘中斷可是和任務排程密切相關,需要特別的注意),系統呼叫api,各種異常中斷處理,可執行應用程式的編寫(這當中可是和保護模式有很大的聯絡),還有就是深刻的體驗到了模組化程式設計的各種好處。在學習此書的過程中,遇到了很多問題,所以在此書的學習過程中,同時也學習了很多相關的資料,包括《linux核心的設計與實現》(ps:學習這本書的原因是因為我選擇的課程就是講授linux的核心,當然還是對此書的學習提供了很多的幫助,主要是概念上的理解和作業系統體系架構的理解);《深入理解linux核心》這本書很厚,但是講解的比較細,但是如果你對計算機系統結構不是很了解的話,前面和硬體相關的部分理解起來比較困難,這本書對於有一定基礎的人應該靜下心來細看,肯定是有很大的收穫,同時我認為這本書也可以作為核心程式設計的人的一本參考書籍;還有就是《386intel》手冊,對於要學習《30天自製作業系統》的人來說intel386的手冊應該靜下心來仔細閱讀。相信如果你能把這幾本書吃透,說明你的基礎就真的特別的紮實了,不論你是準備編寫應用程式,還是核心程式設計,還是嵌入式系統設計都不是問題。平心靜氣,腳踏實地 30天自製作業系統
第一天的內容很少,是一些簡單的基礎知識,在這裡我就沒有必要寫出來了,只說出大概的輪廓了,然後我會對其中的幾點進行詳細的解釋。文章的第一天的輪廓大概是這樣的,作者首先用二進位制編輯器做了乙個顯示二進位制的程式,然後用彙編完全db的形式,後又進行改善,最後以比較標準的組合語言編寫,但程式主體部分還沒有翻...
自己寫個作業系統《一》製作啟動U盤,真機啟動
網路上不少介紹寫個簡易作業系統的文章,大都是製作乙個軟盤映像檔案,然後從虛擬軟碟機中啟動。我希望能直接將系統放入u盤,直接從u盤啟動。經過一番嘗試,成功了。1 一台centos linux物理機 2 as86 ld86工具 安裝 rpm ivh dev86 0.16.17 15.1.el6.x86 ...
30天自製作業系統 導讀
說明 這是8月15日即將上市的一本新書,本文的摘選也可以命名為 30天自製作業系統 上市之前必讀。本書幽默,有趣,可以說是技術書裡的幽默書,讓您讀起來絕對不會感到乏味。在本書上市之前,您一定先要讀下此篇文章,可以避免在學習中走更多的閱讀彎路,因為更多的讀者會問,七百多頁,30天?是的,看完此篇內容,...