這是一個非常簡單的demo性質的操作系統,可以稱之為操作系統是因為已經實現了多任務以及任務切換:這可以說是操作系統最核心的功能。

8086sos的實現僅僅使用了300行彙編代碼,運行在MBR中:這是BIOS讀取並執行的第一個程序。雖然簡單,然而卻足夠讓人了解很多基本概念,包括彙編、寄存器、定址、BIOS、中斷、多任務,任務切換。

你可以使用bochs模擬器進行測試,這是一個強大的開源x86模擬器,模擬了包括x86處理器、BIOS、存儲器和各類硬體外設,還可以進行單步調試。

8086sos運行起來之後,會進行兩個任務taskA和taskB的切換,通過鍵盤中斷來進行任務的切換,為什麼不實用時鐘中斷?因為...我沒有調通8086模式下的時鐘中斷(捂臉...),BIOS中斷相關的資料實在太少。由於這只是一個簡單的demo,而且鍵盤中斷可以達到同樣的演示效果,並不影響對系統本質的理解。在實驗中按下任意一個按鍵即可觸發鍵盤中斷,中斷函數中會執行任務切換的操作。

關於彙編的學習教程,推薦王爽的《彙編語言》。8086作為X86處理器系列的鼻祖,當前全世界運行在所有PC和伺服器上的X64,我們依然可以看到8086的影子,其寄存器、定址方式和8086仍然有著一定的一致性。理解8086對於後續的X86的學習仍然具有相當大的幫助。雖然目前已經幾乎沒有人會自己寫彙編語言了,然而彙編作為計算機體系的最底層,理解彙編,對硬體掌握一定程度的了解,我認為是程序員的基本修養。王爽老師的《彙編語言》思路清晰,內容全面,知識點豐富,推薦大家選擇適當的章節進行深入的閱讀。

8086一般為DIP40的封裝,可以看到有20位的地址匯流排A0-A19,以及16位的數據匯流排D0-D15,其中地址匯流排和數據匯流排復用在相同的引腳上面。由於內部的寄存器均為16bit,然而20位的地址匯流排可定址1M的內存空間,所以8086使用了兩個寄存器組合來進行內存的定址,物理內存 = 段寄存器 << 4 | 偏移寄存器。

講到這裡,青山想起來剛接觸8086寄存器的時候,對intel佩服的五體投地,intel設計的可真好啊:

AX:累加寄存器;BX:基址寄存器;CX:計數寄存器;DX:數據寄存器;

CS:代碼段寄存器;DS:數據段寄存器

intel怎麼可以將字母順序和寄存器含義編排的這麼好,彷彿是渾然天成的設計!在沒接觸其他類型處理器的很長的一段時間裡,我曾經以為所有的寄存器必須以ABCD... 為前綴來命令(捂臉...)。

時至今日,你依然可以在某購物網站買到8086晶元:

價格便宜,可以買幾片收藏用(此處無廣告費)
8088開發板,已經無人問津,因為實在是太過於古老,且沒有太大學習價值
  • 所有資料,包括源碼、模擬器、運行腳本:

wuxx/8086sos?

github.com圖標

如何運行8086sos

  1. 安裝bochs-2.4.5.exe,一路單擊下一步即可完成安裝
  2. 雙擊腳本bochsrc.bxrc,即可運行8086sos

如何編譯8086sos

需要在linux下進行編譯

  1. 安裝彙編編譯器nasm $sudo apt-get install nasm
  2. 在8086sos目錄下執行$make 即可編譯出鏡像kernel.img

視頻教程

自己動手寫操作系統之8086sos?

www.bilibili.com


推薦閱讀:

相关文章