[084][匯編語言]編程:實現從軟盤啟動進入自己寫的超迷你“操作系統”: 顯示 hello world萧芙!

編程:實現從軟盤啟動進入自己寫的超迷你“操作系統”

  • 超迷你“操作系統”,功能:在屏幕中間顯示 hello world!
    hello world!.png
從軟盤啟動操作系統.png

運行:編譯假丧、連接双揪、調試源代碼

  進入 虛擬機XP
  打開 CMD.EXE
  確認軟驅插入軟盤
  將軟盤格式化
[插入 軟盤 具體步驟參考本文最下方測試部分的圖解]
1 開機 遇到提示請插入軟盤 向虛擬機XP插入軟盤.png
2 軟盤使用之前需要進行格式化.png

※※※※※※※※※※※※※※※※※※※※※※※※※※
 編譯、連接包帚、運行 【引導程序】

masm bootcode.asm
link bootcode.obj
(直接運行)bootcode.exe
(調試模式)debug bootcode.exe 

完成后這個步驟后渔期,軟盤A: 0面 0道 1扇區(qū),被寫入 [操作系統引導程序 boot ]渴邦;

※※※※※※※※※※※※※※※※※※※※※※※※※※

 編譯疯趟、連接、運行 【任務程序】
masm taskcode.asm
link taskcode.obj
(直接運行)taskcode.exe
(調試模式)debug taskcode.exe 

完成這個步驟后谋梭,軟盤A: 0面 0道 2扇區(qū)迅办,被寫入[任務程序 task];

※※※※※※※※※※※※※※※※※※※※※※※※※※
 關機
 關機狀態(tài)下 設置 虛擬機XP 從 [軟盤] 啟動
[設置 從軟盤啟動 具體步驟參考本文最下方測試部分的圖解]
3 關機 對軟盤 勾選 啟動時連接 虛擬機XP將從軟盤啟動操作系統.png
4 勾選好 軟盤 啟動時連接后章蚣,再開機站欺,點擊開啟此虛擬機.png

※※※※※※※※※※※※※※※※※※※※※※※※※※
  開機

※※※※※※※※※※※※※※※※※※※※※※※※※※
 以下都是自動發(fā)生的姨夹,不需要人的操作了 

 CPU 自動 
  將 軟盤A: 0面 0道 1扇區(qū) 的 [引導程序 boot ] 
  讀到 內存 0000:7C00H ,
  并且設置CS:IP = 0000:7C00H矾策,立刻跳轉磷账,
  相當于 自動 開始執(zhí)行 [引導程序 boot ] 

[引導程序 boot ]
0、它知道  [task] 就放在 0面0道2扇區(qū)贾虽;
1逃糟、會將[任務程序 task ] 放到內存 0000:7E00H 開始;
2蓬豁、然后 將CS:IP設置為 0000:7E00H绰咽,使得CPU在讀扇區(qū)工作結束之后,
  立刻跳轉到 CS:IP = 0000:7E00h 開始執(zhí)行[任務程序]地粪。

[任務程序 task]
完成 hello world! 在屏幕上的顯示取募。

備注:
1個扇區(qū)有512個字節(jié)(KB),
十進制 512D = 十六進制 200H 蟆技,
因此玩敏,
    0000:7C00H ~ 0000:7DFFH ,這個512個內存單元用來放 boot质礼,
    0000:7E00H 開始的內存單元 放 task .

完整源碼

引導程序 boot

  • 引導程序 bootcode.asm旺聚,包括 :引導程序boot 本體 以及 將其安裝到軟盤的安裝步驟
  • 安裝步驟眶蕉,是先將 boot本體 的機器碼 全部復制到 開辟的內存空間data段 中砰粹,然后調用 BIOS int 13h 中斷完成 寫扇區(qū)
assume cs:code
data segment
    db 512 dup (0)
data ends
code segment
    start:  mov ax,cs
            mov ds,ax
            mov si, offset boot
            
            mov ax,data
            mov es,ax
            mov di,0
            mov cx,offset bootend - offset boot
            cld
            rep movsb
            
            jmp short write
    boot:   jmp short bootstart
            db 10 dup(0)
    
    
    ; 引導程序 boot 將被安裝到內存data開始 
    ; 引導程序的功能:  1.讀扇區(qū) 將 任務程序task 0面0道2扇區(qū) 寫到內存 0000:7E00H;
    ;                   2.將CS:IP指向 0000:7E00H
    bootstart:
            mov ax,cs
            mov ss,ax
            mov sp,10
            
            mov ax,0
            mov es,ax
            mov bx,7E00H
            
            mov al,1
            mov ch,0
            mov cl,2
            mov dl,0
            mov dh,0
            mov ah,2
            
            int 13h
            
            mov bx,0
            push bx
            mov bx,7E00H
            push bx
            retf    

    bootend:    nop
    
    write:
    
    ;   利用 int 13H 中斷 
    ;   將內存 data 處的引導程序 boot
    ;   寫入 軟盤A 0面 0道 1扇區(qū)
            mov ax,data
            mov es,ax
            mov bx,0
            
            mov al,1
            mov ch,0
            mov cl,1
            mov dl,0
            mov dh,0
            mov ah,3
            
            int 13h
            
            mov ax,4c00H
            int 21H
   
    code ends
    end start

任務程序 task

  • 任務程序 taskcode.asm造挽,包括 :任務程序task 本體 以及 將其安裝到軟盤的安裝步驟伸眶;
  • 安裝步驟,是先將 task本體 的機器碼 全部復制到 開辟的內存空間data段 中刽宪,然后調用 BIOS int 13h 中斷完成 寫扇區(qū)
assume cs:code
data segment
    db 512 dup (0)
data ends
code segment
    start: 
    
            mov ax,cs
            mov ds,ax
            mov si, offset task
            
            mov ax,data
            mov es,ax
            mov di,0
            mov cx,offset taskend - offset task
            cld
            rep movsb
            jmp short write
    
    task:       jmp short taskstart
                db "hello world!"
    taskstart:  mov ax,cs
                mov ds,ax
                mov si,7E02h
                
                mov ax,0b800H
                mov es,ax
                mov di,160*12+40*2
                
                mov cx,12
                mov ah,02H
    hellos:     mov al,[si]
                mov es:[di],al
                mov es:[di+1],ah
                inc si
                add di,2
                loop hellos
                    
    taskend:    nop
    
    
    

    write:
    ;   利用 int 13H 中斷 
    ;   將內存 data 處的任務程序
    ;   寫入 軟盤A 0面 0道 2扇區(qū)        
            mov ax,data
            mov es,ax
            mov bx,0
            
            mov al,1
            mov ch,0
            mov cl,2
            mov dl,0
            mov dh,0
            mov ah,3
            
            int 13h
   
            mov ax,4c00h
            int 21H

code ends
end start

測試:從軟盤啟動操作系統(圖解)

  • 結合 運行:編譯界酒、連接圣拄、調試源代碼部分的說明來看
1 開機 遇到提示請插入軟盤 向虛擬機XP插入軟盤.png
2 軟盤使用之前需要進行格式化.png
3 關機 對軟盤 勾選 啟動時連接 虛擬機XP將從軟盤啟動操作系統.png
4 勾選好 軟盤 啟動時連接后,再開機毁欣,點擊開啟此虛擬機.png
5 再次開機后 進入我們自己寫的操作系統.png
6 如何回到虛擬機XP.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末庇谆,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子凭疮,更是在濱河造成了極大的恐慌饭耳,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件执解,死亡現場離奇詭異寞肖,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門新蟆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來觅赊,“玉大人,你說我怎么就攤上這事琼稻∷甭荩” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵帕翻,是天一觀的道長鸠补。 經常有香客問我,道長嘀掸,這世上最難降的妖魔是什么紫岩? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮横殴,結果婚禮上被因,老公的妹妹穿的比我還像新娘。我一直安慰自己衫仑,他們只是感情好梨与,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著文狱,像睡著了一般粥鞋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瞄崇,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天呻粹,我揣著相機與錄音,去河邊找鬼苏研。 笑死等浊,一個胖子當著我的面吹牛,可吹牛的內容都是我干的摹蘑。 我是一名探鬼主播筹燕,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼衅鹿!你這毒婦竟也來了撒踪?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤大渤,失蹤者是張志新(化名)和其女友劉穎制妄,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體泵三,經...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡耕捞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年衔掸,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砸脊。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡具篇,死狀恐怖,靈堂內的尸體忽然破棺而出凌埂,到底是詐尸還是另有隱情驱显,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布瞳抓,位于F島的核電站埃疫,受9級特大地震影響,放射性物質發(fā)生泄漏孩哑。R本人自食惡果不足惜栓霜,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望横蜒。 院中可真熱鬧胳蛮,春花似錦、人聲如沸丛晌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽澎蛛。三九已至抚垄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谋逻,已是汗流浹背呆馁。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留毁兆,地道東北人浙滤。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像气堕,于是被迫代替她去往敵國和親纺腊。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理送巡,服務發(fā)現,斷路器盒卸,智...
    卡卡羅2017閱讀 134,651評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,077評論 25 707
  • 前段時間給同事們講了《狂人日記》這篇小說骗爆,不覺間反而讓自己深陷了進去,為魯迅先生的這種反思精神所折服蔽介。原因有三摘投,其...
    二月寒雪閱讀 930評論 0 2
  • “生病了才知道誰最愛你煮寡,喝醉了才知道你最愛誰”,如果按照這句話來講犀呼,阿七想她是喜歡沈濤的幸撕。 算一算,阿七和沈濤相識...
    七淑閱讀 149評論 0 0