《30天自製作業系統》U盤啟動,真機執行(16天)

2021-07-03 17:58:07 字數 3963 閱讀 6279

下面是真機的執行截圖(當然純屬裝逼,哈哈)

下面還是展示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天?是的,看完此篇內容,...