草,我還以為延時要付費呢
下面將給出一些更具體的 「提示」。這些提示並不是實驗的一步一步的指導,而是羅列了一些實驗中可能遇到的困難,並給予相關提示。它們肯定不會涵蓋所有問題,也不保證其中的每個字都對完成實驗有幫助。所以,它們更適合在你遇到問題時查閱,而不是當作指南一樣地亦步亦趨。本課程所有實驗的提示都是秉承這個思想編寫的。
所以還是先自己做一遍吧~難度不大
改寫bootsect.s
1.解壓縮檔案
# 進入到 oslab 所在的資料夾
$ cd /home/shiyanlou/oslab/
# 解壓,並指定解壓到 /home/shiyanlou/
# 這樣的話,在 /home/shiyanlou/oslab/ 中就能找到解壓後的所有檔案
$ tar -zxvf hit-oslab-linux-20110823.tar.gz \
-c /home/shiyanlou/
# 檢視是否解壓成功
$ ls -al
# 除了壓縮包 hit-oslab-linux-20110823.tar.gz 之外,其他的就是壓縮包中的內容
2.gedit開啟linux 0.11 資料夾中的 boot/bootsect.s、boot/setup.s 和 tools/build.c
3.更改關鍵**
bootsect.s
print some inane message mov ah,#0x03!read cursor pos xor bh,bh int 0×10
mov cx,#23
mov bx,#0x0007 !page 0,attribute 7(normal)
mov bp,#msg1
mov ax,#0×07c0
mov es,ax mov ax,#0x1301 !write string,move cursor int 0x10
inf loop: jmp inf loop
msg1:
.byte 13,10
.ascii "treblez's os desu"
.byte 13,10,13,10
.org 510
boot_flag:
.word 0xaa55
4.進行編譯
cd ./linux-0.11/
然後make all
5.編譯之後得到了好多檔案,之後我們編譯連線
$ as86 -0 -a -o bootsect.o bootsect.s
$ ld86 -0 -s -o bootsect bootsect.o
這裡講解一下,.s.o和.s
.s 組合語言源程式; 操作: 彙編
.s組合語言源程式; 操作: 預處理 + 彙編
.o檔案 只編譯不鏈結形成.o檔案。裡面包含了對各個函式的入口標記,描述,當程式要執行時還需要鏈結(link).鏈結就是把多個.o檔案鏈成乙個可執行檔案。
-0(注意:這是數字 0,不是字母 o)表示生成 8086 的 16 位目標程式,-a 表示生成與 gnu as 和 ld 部分相容的**,-s 告訴鏈結器 ld86 去除最後生成的可執行檔案中的符號資訊。
6.去除bootsect中的可執行檔案頭部(只留下引導扇區的512位元組)
dd bs=1 if=bootsect of=image skip=32
# 當前的工作路徑為 /home/shiyanlou/oslab/linux-0.11/boot/
# 將剛剛生成的 image 複製到 linux-0.11 目錄下
$ cp ./image ../image
# 執行 oslab 目錄中的 run 指令碼
$ ../../run
然後就出現了乙個從dosbox就開始寫,從virualbox也寫過,然後現在又寫了一遍的字串顯示視窗。
改寫setup.s
bootsect.s
setuplen=2
setupseg=0x07e0
entry _start
_start:
mov ah,#0x03
xor bh,bh
int 0x10
mov cx,#36
mov bx,#0x0007
mov bp,#msg1
mov ax,#0x07c0
mov es,ax
mov ax,#0x1301
int 0x10
load_setup:
mov dx,#0x0000
mov cx,#0x0002
mov bx,#0x0200
mov ax,#0x0200+setuplen
int 0x13
jnc ok_load_setup
mov dx,#0x0000
mov ax,#0x0000
int 0x13
jmp load_setup
ok_load_setup:
jmpi 0,setupseg
msg1:
.byte 13,10
.ascii "hello os world, my name is lzj"
.byte 13,10,13,10
.org 510
boot_flag:
.word 0xaa55
setup.s
! print now we are in setup
mov ax,#setupseg
mov es,ax
mov ah,#0x03 ! read cursor pos
xor bh,bh
int 0x10
mov cx,#23
mov bx,#0x0007 ! page 0, attribute 7 (normal)
mov bp,#msg_code
mov ax,#0x1301 ! write string, move cursor
int 0x10
msg_code:
.byte 13,10
.ascii "now we are in setup"
.byte 13,10,13,10
OS實驗一 作業系統的引導
草,我還以為延時要付費呢 下面將給出一些更具體的 提示 這些提示並不是實驗的一步一步的指導,而是羅列了一些實驗中可能遇到的困難,並給予相關提示。它們肯定不會涵蓋所有問題,也不保證其中的每個字都對完成實驗有幫助。所以,它們更適合在你遇到問題時查閱,而不是當作指南一樣地亦步亦趨。本課程所有實驗的提示都是...
哈工大作業系統實驗一 作業系統的引導
哈工大作業系統實驗手冊 實驗資源與參考 不配環境懶人福利 實驗樓 參考閱讀 linux核心完全注釋 趙炯,作業系統原理 實現與實踐 李治軍,劉巨集偉 bootsect.s能完成setup.s的載入,並跳轉到setup.s開始位址執行。而setup.s向螢幕輸出一行 now we are in set...
作業系統(OS)
作用 管理計算機的軟硬體資源,並提供使用介面及工作介面。管理 軟體資源 安裝,使用安全及刪除。硬體資源 cpu執行時間,記憶體儲存空間。提供使用方式 介面 識別,驅動等 工作介面 視覺化介面 桌面,資源管理器 發展 windows win95 win98 winxp win7 win8 win10 ...