OS實驗一 作業系統的引導

2022-05-01 20:06:10 字數 3418 閱讀 2452

草,我還以為延時要付費呢

下面將給出一些更具體的 「提示」。這些提示並不是實驗的一步一步的指導,而是羅列了一些實驗中可能遇到的困難,並給予相關提示。它們肯定不會涵蓋所有問題,也不保證其中的每個字都對完成實驗有幫助。所以,它們更適合在你遇到問題時查閱,而不是當作指南一樣地亦步亦趨。本課程所有實驗的提示都是秉承這個思想編寫的。

所以還是先自己做一遍吧~難度不大

改寫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 ...