JAVA程式設計師需要知道的計算機底層基礎10-作業系統載入程式的簡單製作
彙編實現載入程式
編寫彙編碼
; 檔名 boot.asm
org 7c00h ; BIOS讀入MBR(Master Boot Record主開機記錄)後,從0x7c00h處開始執行,所以這裡把程式扔到記憶體的0x7c00h中去
; 下面部分和10h有關中斷,10h中斷用來顯示字元
mov ax, cs
mov es, ax
mov ax, msg
mov bp, ax ; ES:BP表示顯示字串的地址
mov cx, msgLen ; CX存字元長度
mov ax, 1301h ; AH=13h表示向TTY顯示字元,AL=01h表示顯示方式(字串是否包含顯示屬性,01h表示不包含)
mov bx, 000fh ; BH=00h表示頁號,BL=0fh表示顏色
mov dl, 0 ; 列
int 10h ;10h代表顯示器硬體對應的中斷訊號
msg: db "hello world, welcome to OS!"
msgLen: equ $ - msg ; 字串長度
times 510 - ($ - $$) db 0 ; 因為整個程式不足512位元組,需要填充剩餘部分
dw 0aa55h ; 魔數,必須有這兩個位元組BIOS才確認是MBR
程式實現的就是一個系統載入程式,在螢幕中輸入一段文字。
可以發現這就是一個硬中斷的簡單實踐,實際上和軟中斷的呼叫過程類似,也是給出引數到對應的暫存器,然後進行中斷操作,由核心做出對應的操作。
編譯
nasm boot.asm -o boot.bin
製作啟動軟盤
1、 生成空白軟盤映象(軟盤大小必須為1.44M,因此bs=1474560 )
dd if=/dev/zero of=floppy.img bs=1474560 count=1
2、製作包含主開機記錄boot.bin的啟動映象檔案(載入程式佔512byte)
dd if=boot.bin of=myos.img bs=512 count=1
3、將第2步生成的bin引導映象檔案複製到空白軟盤中,並在引導映象內容後面的軟盤內容補上空白,成為合適大小的軟盤映象,一共2880個扇區,略過第一個
dd if=floppy.img of=myos.img skip=1 seek=1 bs=512 count=2879
用軟盤啟動系統
1、將myos.img下載到windows
2、VMWare建立空的虛擬機器
-
a、檔案 - 建立新的虛擬機器 - 典型
-
b、稍後安裝作業系統
-
c、其他
-
d、一路next 完成
-
e、虛擬機器設定,去掉CD/DVD選項中“啟動時連線”
-
f、網路,選擇“僅主機模式”,勾選“啟動時連線”(好像無所謂)
-
g、新增軟盤驅動器 使用軟盤映像 找到myos.img
3、啟動虛擬機器
記憶體時模式
記憶體時模式指的是計算器啟動後,記憶體裡存放的內容結構。
從這裡可以發現,作業系統的載入程式確實是在記憶體地址中的07C00H位置上。在這個載入程式之前的記憶體還存放了一些其他的東西,是關於一些例如BIOS自身的資料(例如我怎麼輸入了一串英文,但實質這對計算機來說就是一段01的數,如何讓顯示器可以把這段翻譯成英文顯示? 我猜測BIOS Data Area中就是裝了這個對映的東西。
記憶體從載入程式再向上面看,發現還有一些固定的硬體之類的了。
為什麼載入程式一定在07C00H?
簡單來說,IBM最初約定的是在07C00H,但後續為了相容性,就都統一都放在這個地方了。
參考:https://www.glamenv-septzen.net/en/view/6
相關文章
- 程式設計必備基礎 計算機組成原理+作業系統+計算機網路,計算機基礎——更適合程式設計師的程式設計必備基礎知識作業系統計算機網路程式設計師
- 計算機的作業系統計算機作業系統
- 計算機作業系統之程式掃盲計算機作業系統
- 計算機作業系統計算機作業系統
- 程式設計作業——系統管理程式設計
- 計算機作業系統|作業系統引論計算機作業系統
- 沒有任何程式設計基礎可以製作系統軟體嗎?程式設計
- 嵌入式系統程式設計基礎第一二週作業程式設計
- 女人的作業系統和程式設計師的職責薦作業系統程式設計師
- 計算機作業系統教程 2 作業系統概述計算機作業系統
- 作業系統:計算機的生態系統作業系統計算機
- 程式設計師OR非程式設計師,有些程式設計的事需要知道程式設計師
- 學習計算機程式設計需要什麼基礎?計算機程式設計
- 一網打盡:Java 程式設計師必須瞭解的計算機底層知識!Java程式設計師計算機
- 計算機作業系統掃盲計算機作業系統
- 計算機重灌Windows作業系統計算機Windows作業系統
- 計算機導論作業系統計算機作業系統
- IOS開發 製作簡單的計算器iOS
- 程式設計師是否需要學習底層知識程式設計師
- 程式設計師程式設計入門一定知道!程式設計師需要學什麼?程式設計師
- Java 與底層作業系統的互動細節Java作業系統
- reveal.js - 程式設計師的PPT製作神器JS程式設計師
- C語言Socket程式設計(計算機網路作業)C語言程式設計計算機網路
- 對於計算機作業系統的認識計算機作業系統
- 2021秋招面試計算機基礎總結 - 作業系統面試計算機作業系統
- Linux作業系統——簡單程式同步Linux作業系統
- 在作業系統、晶片領域跌倒的中國程式設計師,如何崛起?作業系統晶片程式設計師
- Java基礎008_程式設計入門_計算機史上的兩個鼻祖Java程式設計計算機
- Linux作業系統之Shell程式設計Linux作業系統程式設計
- 作業系統實驗(一)-Shell程式設計作業系統程式設計
- 作業系統精髓設計原理 程式排程作業系統
- 作業系統實驗1 Shell程式設計作業系統程式設計
- 《java程式設計基礎》方法的過載Java程式設計
- 作為程式設計師必須知道的程式語言編年史程式設計師
- 當代計算機程式語言簡單梳理(附計算機硬體底層工作流程)計算機
- 程式設計師的計算機配置程式設計師計算機
- 如何確定遠端計算機所用的作業系統計算機作業系統
- 作為雲端計算的互動設計師需要學習哪些?