先弄個helloworld吧,雖然這個網上一大堆,不過不知道的人還是不少,就簡單的弄乙個吧。。。。。。。
系統啟動時,第一步是bios自檢(這個不管),然後從cmos中設定的預設引導介質中載入第乙個扇區(512位元組)到記憶體的0x07c00處(0x0000:0x7c00),
之後,跳轉執行。
所以,引導啟動系統的第一部分就是對這512位元組進行程式設計。。。
這次呢,就寫乙個簡單的helloworld(啟動後,在螢幕顯示helloworld)。
其它功能不考慮,
下面我就開始整了,思想有寫亂,你們講究的看吧。
顯示服務(video service——int 10h)
13h號功能
入口:ah = 13h
bh = 頁碼(咱用0號的)
bl = 字元屬性
cx = 字串長度
dh,dl = (x, y) 座標
es:bp = 字串位址
ok開始吧
# bootasm.s 這裡,副檔名必須大寫,具體為什麼,問gcc去
.globl start
start: # 入口位址
# 初始化各個段暫存器
movw %cs, %ax
movw %ax, %ds
movw %ax, %es
movw %ax, %ss
# 設定棧頂
movw $0x7c00, %sp
# 清一下螢幕吧。。。。
movw $0x02, %ax
int $0x10
# 顯示hello world !!!
movw $putstr, %bp
movb $0x13, %ah
movb $0x01, %al
movb $0x00, %bh
movb $0x0f, %bl
movw $14, %cx # 14個字元
xorw %dx, %dx # 顯示座標為(0, 0)
int $0x10
# 死迴圈,停機
1: hlt
jmp 1b
putstr:
.ascii "hello world!!!"
.byte 0
# 後面要多空開一行,不然編譯不通過
編譯命令為:
gcc -fno-builtin -o2 -md -nostdinc -i. -c bootasm.s
ld -n -e start -ttext 0x7c00 -o boot.o bootasm.o
最後把鏈結出來的boot.o轉換為bin檔案
objcopy -s -o binary -j .text boot.o boot
然後需要將boot擴充套件到512位元組,
最後兩個位元組設定為
0x55, 0xaa
這是引導標誌。
到這裡,**就編譯完畢了。
用dd命令把boot寫入硬碟映象中
dd if=/dev/zero of=os0.00.img count=10000 # 建立乙個硬碟映象檔案os0.00.img
dd if=boot of=os0.00.img # 把boot寫入映象開頭,就是第乙個扇區處
這個是截圖:
然後就跑一下,看看效果吧。。。。
今天就到這裡吧,。。。。。後面慢慢的往裡面加功能
先整個簡單的。。。
一步一步實現乙個簡單的OS 載入核心
這一塊更新的 比較多,所以就不方便全部貼出來了。具體的 大家直接到群裡面找就可以了 os0.3 另外,我配置了bochs虛擬機器,這樣大家載下來就可以使用bochs虛擬機器直接除錯了。下面我就直接貼一下主要的 吧,setupasm.s 這裡,跳轉到c函式直接call就可以了 start32 初始化保...
一步一步實現乙個簡單的OS 異常處理
簡單的對idt進行初始化,實現系統異常顯示 mmu裡面有大部分巨集定義是抄 自己動手寫作業系統裡面的pm.inc檔案中的 main.c 核心入口 int kmain traps.c 初始化,異常處理 void init traps 裝載idt lidt sys traps,sizeof struct...
一步一步實現FormsAuthentic驗證登入
本文不講原理,只講用法,原理性的東西網上特別多,不過還是會對一些要用到的東西進行解釋,不深入講原理。本文中用的是vs2012 net mvc 4.0。原理看這篇文章 看完這個文章絕對受益匪淺。說下登入的整個流程 使用者輸入賬號密碼 點選提交 資料提交到後台控制器 去資料庫取得使用者資料 如果登入成功...