1. 程式人生 > >假設寫一段代碼引導PC開機這段代碼是 ? Here is a tiny "OS" :-D

假設寫一段代碼引導PC開機這段代碼是 ? Here is a tiny "OS" :-D

博士 輸出 虛擬 mov download 開機 控制 style blog

Hello world -- OS


我找到了華科紹誌遠博士的相關代碼,發現他依據MIT的JOS的boot.S 稍作改動。然後單獨剝離出來,能夠非常好玩~


資料下載地址:

http://download.csdn.net/detail/u011368821/8006465


原則上僅僅須要兩個文件(boot.S mmu.h)就能夠,可是我們這裏還須要一些附帶的虛擬器工具。以及makefile來做實驗.


須要提示的就是地址0xb800是顯存的開頭地址 : )

MOVSB(MOVe String Byte)
即字符串傳送指令。這條指令按字節傳送數據。

通過SI和DI這兩個寄存器控制字符串的源地址和目標地址,比方DS:SI這段地址的N個字節拷貝到ES:DI指向的地址,復制後DS:SI的內容保持不變。 IBM PC部分的使用統一的編址方式。CGA顯示卡上現實內存的地址就是直接占用了儲存器地址空間0xB800~BC00。若要讓一個字符顯示在顯示器上面。能夠直接誒使用內存操作指令往這個內存區域運行寫操作.

以下這段代碼中把%es設置為0xb800,寓意就在於di寄存器的輸出指向顯存!

技術分享

rep指令就是反復運行 rep 後面跟的指令,直到%cx寄存器的值為0(每次運行一次,%cx寄存器的值遞減)


這是real model以下的情況

到後面protected model的時候,僅僅是地址的表示形式會發生一點變化而已

不再是segment:offset的形式

而是直接的比如 0xb800(real model) => 0xb8000(protected model)

顯存就像一個非常好玩的大buffer 哈哈哈哈哈~


技術分享

這裏最後多出來的EOF是我自己加上去的。我加了一小段代碼:

技術分享

前半部分是原來有的。後面部分#print my name是我自己加的功能

這裏我精確計算了前半部分打印helloworld會占用多少個字節(62 byte)

於是0xb8d22 + 0x3D (60) = 0xb8d60 : ) Don‘t panic !


最後那個$24事實上不怎麽好,是我忘記改了....這裏最好恰當的改成你想打印多少字節的內容就可以















埃塞的情人變成巖石 皮埃爾 法國 1763年 325x329cm 布油彩 巴黎盧浮宮
在這幅具有神話意境的畫幅中,畫家以極為細膩的筆觸和華麗的色彩描繪畫中人物形象和環境飾物。以古羅馬柱式作中景建築。使畫中添加莊重感。

皮埃爾用虛幻和現實結合的手法創造了一個亦真亦幻、亦人亦神的藝術境地,在某種意義上又有浪漫情調。

能夠說這是由古典主義向浪漫主義過渡的一種藝術表現 。這幅畫雖取材於希臘神話。但畫家似乎並不註重故事的刻畫和人物的表現,而是將註意力放在女性人物的身上。尤其對衣物在光線下的反光情有獨鐘。人物有著羅可可式的甜美和纖秀。但人的目光卻不能統一在一起,從而產生一種沒有關聯的分離感和無動於衷的造型效果 。畫面中埃塞端坐於沙發之上,看到情人變成巖石的情景,被畫家處理成理性的冷靜,劇烈的戲劇性被冷靜所消解。但我們卻依舊能夠看出新古典主義繪畫那高貴的風範和冷靜的氣度


技術分享

假設寫一段代碼引導PC開機這段代碼是 ? Here is a tiny "OS" :-D