操作系統(tǒng)原理課程設(shè)計(jì)微型操作系統(tǒng)的設(shè)計(jì)_第1頁(yè)
操作系統(tǒng)原理課程設(shè)計(jì)微型操作系統(tǒng)的設(shè)計(jì)_第2頁(yè)
操作系統(tǒng)原理課程設(shè)計(jì)微型操作系統(tǒng)的設(shè)計(jì)_第3頁(yè)
操作系統(tǒng)原理課程設(shè)計(jì)微型操作系統(tǒng)的設(shè)計(jì)_第4頁(yè)
操作系統(tǒng)原理課程設(shè)計(jì)微型操作系統(tǒng)的設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、重慶科技學(xué)院重慶科技學(xué)院 課程設(shè)計(jì)報(bào)告課程設(shè)計(jì)報(bào)告 院(系):_電氣與信息工程學(xué)院_ 專業(yè)班級(jí): 計(jì)科普 2008-02 學(xué)生姓名: 學(xué) 號(hào): 設(shè)計(jì)地點(diǎn)(單位)_ _ i515_ _ _ 設(shè)計(jì)題目:_ 微型操作系統(tǒng)的設(shè)計(jì)_ _ 完成日期: 2011 年 6 月 19 日 指導(dǎo)教師評(píng)語(yǔ): _ _ _ _ _ _ _ _ 成績(jī)(五級(jí)記分制):_ _ _ 指導(dǎo)教師(簽字):_ _ _ 重慶科技學(xué)院重慶科技學(xué)院 課程設(shè)計(jì)任務(wù)書課程設(shè)計(jì)任務(wù)書 設(shè)計(jì)題目:微型操作系統(tǒng)的設(shè)計(jì) 學(xué)生姓名 課程名稱操作系統(tǒng)原理課程設(shè)計(jì)專業(yè)班級(jí)計(jì)科普 08 地 點(diǎn) i515 起止時(shí)間2011 年 6 月 12 日-2011 年

2、6 月 16 日 設(shè) 計(jì) 內(nèi) 容 及 要 求 (1) 配置操作系統(tǒng)編寫的所需的環(huán)境(虛擬機(jī)的建立和相應(yīng)環(huán)境建立) ,以準(zhǔn)備相 關(guān)的必須工具的準(zhǔn)備,并學(xué)會(huì)相關(guān)工具的使用,為以后編寫一個(gè)微操作系統(tǒng)奠 定基礎(chǔ)和準(zhǔn)備平臺(tái)。 (2) 學(xué)習(xí) nasm 匯編器在本次設(shè)計(jì)中的使用。 (3) 學(xué)習(xí)裸機(jī)啟動(dòng)的過(guò)程,消化操作系統(tǒng)引導(dǎo)程序的結(jié)構(gòu),在此基礎(chǔ)上,完成在實(shí) 模式下從軟盤引導(dǎo)計(jì)算機(jī)的程序編寫。 (4) 學(xué)習(xí)本次設(shè)計(jì)需要的實(shí)模式到保護(hù)模式切換的相關(guān)知識(shí)。理解 gdt 在保護(hù)模式 的工作機(jī)理 (5) 編寫在保護(hù)模式下的引導(dǎo)程序,并用 c 語(yǔ)言模擬寫一個(gè)“內(nèi)核” ,并實(shí)現(xiàn)在保 護(hù)模下通過(guò)引導(dǎo)程序啟動(dòng)計(jì)算機(jī)并將該“內(nèi)

3、核”加載到內(nèi)存中。最后切換到內(nèi) 核。 設(shè) 計(jì) 參 數(shù) (1)寫出編寫一個(gè)操作系統(tǒng)所需的環(huán)境和操作說(shuō)明書。 (2)總結(jié)計(jì)算機(jī)啟動(dòng)順序和具體過(guò)程。 (3)實(shí)現(xiàn)在實(shí)模式下系統(tǒng)引導(dǎo)程序的編寫。 (4)理解消化實(shí)模式到保護(hù)模式切換原理以及相關(guān)的數(shù)據(jù)結(jié)構(gòu)和工作過(guò)程, 并實(shí)現(xiàn)之。 (5)完成保護(hù)模式下的引導(dǎo)程序,并完成“內(nèi)核”的加載,并使“內(nèi)核” 運(yùn)行起來(lái)。 附加要求:請(qǐng)?jiān)谠O(shè)計(jì)的課后完成具有進(jìn)程調(diào)度和管理的內(nèi)核的編寫。 進(jìn) 度 要 求 6 月 12 日布置任務(wù),對(duì)各個(gè)任務(wù)的基礎(chǔ)知識(shí)進(jìn)行講解 6 月 12 日 安裝環(huán)境,并熟悉相關(guān)工具的使用。 6 月 13 日完成實(shí)模式下引導(dǎo)程序的編寫。 6 月 14 日完成

4、實(shí)模式與保護(hù)模式的切換代碼的設(shè)計(jì)。 6 月 15 日完成實(shí)模式引導(dǎo)程序和內(nèi)核加載程序編寫。 6 月 16 日完成答辯和報(bào)告撰寫。 參 考 資 料 隨任務(wù)布置的相關(guān)電子文檔。 其 它 說(shuō) 明 .本表應(yīng)在每次實(shí)施前一周由負(fù)責(zé)教師填寫二份,院系審批后交院系辦備案,一 份由負(fù)責(zé)教師留用。.若填寫內(nèi)容較多可另紙附后。 3.一題多名學(xué)生共用的,在設(shè)計(jì)內(nèi)容、參數(shù)、要求等方面應(yīng)有所區(qū)別。 教研室主任: 指導(dǎo)教師: 摘要 操作系統(tǒng)(operating system,簡(jiǎn)稱 os)是一管理電腦硬件與軟件資源的 程序,同時(shí)也是計(jì)算機(jī)系統(tǒng)的內(nèi)核與基石,它為用戶執(zhí)行程序提供方便、最有 效的環(huán)境。 本設(shè)計(jì)任務(wù)是設(shè)計(jì)一個(gè)微型

5、操作系統(tǒng)。該操作系統(tǒng)首先需要搭建虛擬機(jī)環(huán) 境,為編寫一個(gè)微操作系統(tǒng)奠定基礎(chǔ)。裸機(jī)啟動(dòng)的過(guò)程,實(shí)現(xiàn)實(shí)模式下從軟盤 引導(dǎo)計(jì)算機(jī)的啟動(dòng)。完成保護(hù)模式下的引導(dǎo)程序,并完成“內(nèi)核”的加載,并 使“內(nèi)核”運(yùn)行起來(lái)。 “內(nèi)核”部分實(shí)現(xiàn)鍵盤中斷,中斷服務(wù)程序讀取鍵盤值并 顯示出來(lái)。 關(guān)鍵詞:操作系統(tǒng) 虛擬機(jī) 裸機(jī)啟動(dòng) 鍵盤中斷 目目 錄錄 1 系統(tǒng)需求分析.1 1.1 設(shè)計(jì)內(nèi)容與目的 .1 1.2 設(shè)計(jì)的實(shí)現(xiàn)方案 .1 2.總體設(shè)計(jì).2 2.1 功能模塊圖 .2 2.2 計(jì)算機(jī)引導(dǎo)程序 .2 2.3 內(nèi)核鍵盤中斷實(shí)現(xiàn) .3 3 詳細(xì)設(shè)計(jì).6 3.1 啟動(dòng)程序?qū)崿F(xiàn) .6 3.2 內(nèi)核鍵盤中斷實(shí)現(xiàn) .9 3.3

6、功能實(shí)現(xiàn) .11 4. 設(shè)計(jì)總結(jié).13 5 致謝.14 6 參考文獻(xiàn).15 1 1 系統(tǒng)需求分析系統(tǒng)需求分析 1.1 設(shè)計(jì)內(nèi)容與目的 設(shè)計(jì)一個(gè)微型操作系統(tǒng),在實(shí)模式下從軟盤引導(dǎo)計(jì)算機(jī)啟動(dòng),并在保護(hù)模 式下運(yùn)行“內(nèi)核” 。通過(guò)分析,該設(shè)計(jì)需要完成以下任務(wù): (1)搭建虛擬機(jī)環(huán)境,為編寫一個(gè)微操作系統(tǒng)奠定基礎(chǔ)。 (2)利用 nasm 匯編器編譯啟動(dòng)匯編程序。 (3)完成在實(shí)模式下從軟盤引導(dǎo)計(jì)算機(jī)。 (4)學(xué)習(xí)本次設(shè)計(jì)需要的實(shí)模式到保護(hù)模式切換的相關(guān)知識(shí)。理解 gdt 在保護(hù) 模式的工作機(jī)理。 (5)編寫在保護(hù)模式下的引導(dǎo)程序,并用 c 語(yǔ)言模擬寫一個(gè)“內(nèi)核” ,并實(shí)現(xiàn) 在保護(hù)模下通過(guò)引導(dǎo)程序啟動(dòng)計(jì)

7、算機(jī)并將該“內(nèi)核”加載到內(nèi)存中。最后切換 到內(nèi)核。 1.2 設(shè)計(jì)的實(shí)現(xiàn)方案 本設(shè)計(jì)完成一個(gè)真正意義上的操作系統(tǒng)引導(dǎo),計(jì)算機(jī)啟動(dòng)程序?qū)挠?jì)算機(jī)啟 動(dòng)時(shí)的 16 位的實(shí)模式轉(zhuǎn)到現(xiàn)在通用的 32 位的保護(hù)模式下?,F(xiàn)在的操作系統(tǒng)除 了最低層的部份之外,均由高級(jí)語(yǔ)言完成,在本設(shè)計(jì)中也將用高級(jí)語(yǔ)言來(lái)編寫 內(nèi)核。實(shí)現(xiàn)的一個(gè)內(nèi)核是用 c 語(yǔ)言編寫的。用匯編寫的引導(dǎo)程序,把 c 語(yǔ)言寫 的內(nèi)核載入并執(zhí)行,這就是本設(shè)計(jì)將要完成的主要任務(wù)。內(nèi)核中的鍵盤中斷設(shè) 計(jì) intel 8259el 8259a 可編程中斷控制器可以為 cpu 處理 8 位優(yōu)先級(jí)中斷, 而且,無(wú)須額外電路即可級(jí)聯(lián)擴(kuò)展至 64 位優(yōu)先級(jí)

8、中斷處理。通過(guò)對(duì) 8259a 的 初始化和控制,可以實(shí)現(xiàn)在保護(hù)模式下的鍵盤中斷。 2.2.總體設(shè)計(jì)總體設(shè)計(jì) 2.1 功能模塊圖 該設(shè)計(jì)的功能模塊如下圖所示: 圖 2.1 功能模塊圖 2.2 計(jì)算機(jī)引導(dǎo)程序 本程序的主要功能是實(shí)現(xiàn)實(shí)模式和保護(hù)模式的切換。 (1)切換到保護(hù)方式的準(zhǔn)備工作 在從實(shí)模式切換到保護(hù)模式之前,必須作必要的準(zhǔn)備。需要建立合適的全局描述符表, 并使用 gdtr 指向該 gdt。因?yàn)樵谇袚Q到保護(hù)方式時(shí),至少要把代碼段的選擇子裝載到 cs,所以 gdt 中至少含有代碼段的描述符。 (2)由實(shí)模式切換到保護(hù)模式 在做好準(zhǔn)備后,從實(shí)模式切換到保護(hù)模式原則上只要把控制寄存器 cr0 中

9、的 pe 位置 1 即可。 mov eax ,cr0 ; 微型操作系統(tǒng) 實(shí)模式下從軟盤 引導(dǎo)計(jì)算機(jī) “內(nèi)核”實(shí)現(xiàn)鍵盤 中斷并顯示鍵盤值 從 鍵 盤 輸 入 值 中 斷 響 應(yīng) 顯 示 or eax , 1 mov cr0 ,eax 實(shí)際情況要比這復(fù)雜些。執(zhí)行上面的三條指令后,處理器轉(zhuǎn)入保護(hù)模式,但 cs 中的 內(nèi)容還是實(shí)模式下代碼段的段值,而不是保護(hù)模式下代碼段的選擇子,所以在取指令之前 得把代碼段的選擇子裝入 cs。為此,緊接著這三條指令,安排一條如下所示的段間轉(zhuǎn)移指 令 jmp gdt_code_addr:code_32 ; 跳入 32 位的代碼段中 這條段間轉(zhuǎn)移指令 在實(shí)模式下被預(yù)取并在

10、保護(hù)方式下被執(zhí)行 。利用這條段間轉(zhuǎn)移指 令可把保護(hù)模式下代碼段的選擇子裝入 cs,同時(shí)也刷新指令預(yù)取隊(duì)列。從此真正進(jìn)入保護(hù) 模式。 2.3 內(nèi)核鍵盤中斷實(shí)現(xiàn) 要使用中斷方式,就必須編寫中斷處理程序,通過(guò) idt(中斷描述符表) 讓 cpu 知道此中斷的中斷處理程序在什么地方,此表的每一個(gè)表項(xiàng)對(duì)應(yīng)一個(gè)中 斷,每一個(gè)表項(xiàng)都指明此中斷的中斷處理程序在什么地方。因此首要的任務(wù)是 要構(gòu)造一個(gè)中斷描述符表。 中斷描述符表一共可有 256 項(xiàng),即 256 個(gè)中斷。頭三十二項(xiàng),也就是 031 號(hào)中斷,已經(jīng)被 cpu 及硬件所占用了,因此只能從第三十三項(xiàng)即 32 號(hào)中斷開始 構(gòu)造中斷及中斷服務(wù)程序 。 可編程中

11、斷控制器(pic)功能上是中斷驅(qū)動(dòng)系統(tǒng)環(huán)境下的總管家,決定哪 一個(gè)輸入優(yōu)先級(jí)最高,確定輸入請(qǐng)求是否擁有比當(dāng)前服務(wù)級(jí)別更高的優(yōu)先級(jí), 并且將決定出的中斷通知 cpu。 為了使中斷系統(tǒng)起作用,需要對(duì) pic(可編程的中斷控制器)進(jìn)行編程, pic 是可編程的中斷控制器,它可以處理硬件中斷請(qǐng)求,當(dāng)硬件發(fā)生中斷時(shí), pic 把中斷信號(hào)送到 cpu,然后 cpu 處理中斷。實(shí)際上有兩上 pic,第一個(gè) pic1(端口號(hào) 0 x200 x21)處理 irq0irq7 的請(qǐng)求,第二個(gè) pic2(端口號(hào) 0 xa00 xa1)處理 irq8irq15 的請(qǐng)求 cpu 只知道邏輯意義上的中斷,不區(qū)分是 物理上的

12、軟件中斷還是硬件中斷,因此必須把 cpu 不知道的物理中斷,映射為 cpu 知道的邏輯意義上的中斷。在實(shí)模式下,這項(xiàng)工作由 bios 來(lái)做,在保護(hù)模 式下需要自己編程。 通過(guò)發(fā)送一些 icw(初始化命令字)來(lái)實(shí)現(xiàn)對(duì) pics 的控制和初始化。 1. 發(fā)送 icw1 到 pic1(20h) 與 pic2(a0h) 中 2. 發(fā)送 icw2 到 pic1(21h) 與 pic2(a1h) 中 3. 發(fā)送 icw3 到 pic1(21h) 與 pic2(a1h)中 4. 發(fā)送 icw4 到 pic1(21h) 與 pic2(a1h)中 利用內(nèi)嵌匯編發(fā)送一些 icw(初始化命令字)來(lái)實(shí)現(xiàn)對(duì) pics

13、的控制和初始化, 實(shí)現(xiàn)代碼如下: _asm_(mov $0 x11,%al;out %al,$0 x20 n); _asm_(mov $0 x11,%al;out %al,$0 xa0 n); _asm_(mov $0 x20,%al;out %al,$0 x21 n); _asm_(mov $0 x28,%al;out %al,$0 xa1 n); _asm_(mov $0 x04,%al;out %al,$0 x21 n); _asm_(mov $0 x02,%al;out %al,$0 xa1 n); _asm_(mov $0 x1,%al;out %al,$0 x21 n); _asm

14、_(mov $0 x1,%al;out %al,$0 xa1 n); _asm_(mov $0 xfd,%al;out %al,$0 x21 n); _asm_(mov $0 xff,%al;out %al,$0 xa1 n); 初始化命令字格式初始化命令字格式 icw1 a0d7d6d6d4d3d2d1d0 0a7a6a51ltimadisnglic4 中斷向量地址 a7- a5(僅用于 mcs- 80/85) 1:電平觸發(fā) 0:邊沿觸發(fā) 地址調(diào)用間隔 1:4 間隔 0:8 間隔 1:?jiǎn)纹J?0:級(jí)聯(lián)模式 1:需要 icw4 0 不需要 icw2 a0d7d6d6d4d3d2d1d0 1a

15、15/t7a14/t6a13/t5a12/t4a11/t3a10a9a8 中斷向量地址的 a15-a8(mcs-80/85) 中斷向量地址 t7-t3 icw3(主片)(主片) a0d7d6d5d4d3d2d1d0 11:ir 輸入有從片 0:ir 輸入無(wú)從片 icw3(從片)(從片) a0d7d6d5d4d3d2d1d0 100000id2id1id0 從片地址 icw4 a0d7d6d5d4d3d2d1d0 1000sfnmbufm/saeoi mpm 1:特殊全嵌套模 式 0:全嵌套模式 0x:無(wú)緩沖模式 10:緩沖模式/從片 11:緩沖模式/主片 1:自動(dòng) eoi 0:一般 eoi 1

16、:8086/8088 模式 0:mcs-80/85 模式 pic1 處理的中斷有: 0 系統(tǒng)時(shí)鐘 1 鍵盤 2 重定向到 irq9 (pic2 的 irq1) 3 串口 1(com2/4) 4 串口 2(com1/3) 5 聲卡 6 軟驅(qū) 7 并行端口 pic2 處理的中斷有: 0 實(shí)時(shí)時(shí)鐘 1 來(lái)自 irq2 (pic1) 2 保留 3 保留 4 鼠標(biāo) 5 數(shù)學(xué)協(xié)處理器 6 硬盤 7 保留 因此,我們只要打開 pic1 的 1 號(hào)鍵盤中斷就可以實(shí)現(xiàn)實(shí)模式下的鍵盤中斷功能。 通過(guò)這兩條內(nèi)嵌匯編:_asm_(mov $0 xfd,%al;out %al,$0 x21 n); _asm_(mov

17、$0 xff,%al;out %al,$0 xa1 n); 就可以在保護(hù)模式下打開鍵盤中斷。 3 3 詳細(xì)設(shè)計(jì)詳細(xì)設(shè)計(jì) 3.1 啟動(dòng)程序?qū)崿F(xiàn) bits 16 org 0 x7c00 jmp main ; 數(shù)據(jù)定義 bootdrive db 0 ; - ; gdt 定義,此處定義段及段描述符 gdt: gdt_null: dd 0 dd 0 ; 每個(gè)段的描述符是 64 位(8 字節(jié)),空描述符的這 64 位全是 0 gdt_code_addr equ $ - gdt ;求得代碼段在 gdt 表中的位置 gdt_code: dw 0 xffff ; 段大小為 4gb dw 0 ; 基地址(24 位

18、) db 0 db 10011010b;屬性描述位,指明此是代碼段,可讀可執(zhí) db 11001111b db 0 ; gdt_data_addr equ $ - gdt;求得數(shù)據(jù)段在 gdt 表中的位置 gdt_data: dw 0 xffff dw 0 db 0 db 10010010b ; 指明此是數(shù)據(jù)段,可讀可寫 db 11001111b db 0 gdt_end: gdt_addr: dw gdt_end - gdt - 1 ;gdt 表的大小 dd gdt ; gdt 表的位置 main: ;引導(dǎo)程序從此處開始執(zhí)行 mov bootdrive , dl ; 得到啟動(dòng)的驅(qū)動(dòng)器號(hào) xor

19、 ax , ax ; 設(shè)置 ds mov ds , ax ; 清屏 ;mov ax , 3 ; 設(shè)置清屏功能號(hào) ;int 0 x10 ; 調(diào)用 bios 10 號(hào)中斷清屏 .resetfloppy ; 重置磁盤,不是必須的,主要是為了安全起見 mov ax , 0 ; 設(shè)置重置磁盤的功能號(hào) mov dl , bootdrive ; 選擇啟動(dòng)磁盤 int 0 x13 ; 調(diào)用 bios 13 號(hào)中斷重置磁盤 jc .resetfloppy ; 如果出錯(cuò)則重試 .readfloppy ; 讀內(nèi)核到內(nèi)存中 0000:9000 (es:bx)處, xor ax , ax ; 設(shè)置 es 寄存器 mov

20、 es , ax mov bx , 0 x9000 mov ah , 2 ; 設(shè)置讀磁盤功能號(hào) mov dl , bootdrive ; 設(shè)置欲讀驅(qū)動(dòng)器號(hào) mov ch , 0 ; 磁頭號(hào) mov cl , 2 ; 起始扇區(qū)號(hào),從第二個(gè)扇區(qū)開始讀, ; 第一個(gè)扇區(qū)是引導(dǎo)扇區(qū),第二個(gè)才是內(nèi)核所在 mov al , 17 ; 需讀入扇區(qū)的數(shù)量,此處讀了 17 個(gè)扇區(qū) ; 是怕內(nèi)核較大,讀少了讀不完 int 13h ; 調(diào)用 bios 13 號(hào)中斷開始讀扇區(qū), ; 此中斷會(huì)將數(shù)據(jù)讀到 es:bx 處 jc .readfloppy ; 如果出錯(cuò)則重試(ah 中是錯(cuò)誤號(hào),為 0 則沒錯(cuò) mov dl ,

21、 bootdrive ; 停止驅(qū)動(dòng)器 mov edx , 0 x3f2 mov al , 0 x0c out dx , al cli ; 關(guān)中斷 lgdt gdt_addr ; 載入 gdt 的描述符 mov eax , cr0 ; 下面三句設(shè)置 cr0 的第 0 位(pe 位)為 1, ; 表示進(jìn)入保護(hù)模式 or eax , 1 mov cr0 , eax jmp gdt_code_addr:code_32 ; 跳入 32 位的代碼段中 bits 32 code_32: mov ax ,gdt_data_addr ; 以下三句設(shè)置 ds,es,ss,fs,gs ;為數(shù)據(jù)段描述表的位置 mov

22、 ds , ax mov es , ax mov ss , ax mov fs , ax mov gs , ax mov esp , 0 xffff ;設(shè)置堆棧的頭指針 jmp gdt_code_addr:0 x9000 ; 跳入內(nèi)核, ; gdt_code_addr 是定義的代碼段的描述符所在的索引 ; 由于我們先前是把內(nèi)核讀到了 0 x9000 的位置, times 510-($-$) db 0 db 0 x55 db 0 xaa 分析:分析:用 nasm 對(duì)匯編代碼進(jìn)行編譯:nasm load.asm -o load.bin 編譯成功后的 load.bin 作為操作系統(tǒng)實(shí)模式下計(jì)算機(jī)的引

23、導(dǎo)程序。 程序大體流程圖如下: 圖圖 .1 引導(dǎo)程序流程圖引導(dǎo)程序流程圖 開始 定義段及段描述符, 并設(shè)置段及段描述 符的屬性 選擇啟動(dòng)磁盤 設(shè)置讀磁盤功能號(hào) 第二個(gè)扇區(qū)開始讀 是否出錯(cuò)? 關(guān)中斷 載入 gdt 描述符 跳入 32 位的代碼段 中 結(jié)束 是否 3.2 內(nèi)核鍵盤中斷實(shí)現(xiàn) typedef struct unsigned long dword0 ; unsigned long dword1 ; segment_desc; unsigned char* videomem = (unsigned char*)0 xb8000; segment_desc idt256; u

24、nsigned long idt_desc2; unsigned long idt_addr; unsigned long keyboard_addr; unsigned long idt_offset =0 x8; void keyboard_interrupt(); int main() _asm_(mov $0 x11,%al;out %al,$0 x20 n); _asm_(mov $0 x11,%al;out %al,$0 xa0 n); _asm_(mov $0 x20,%al;out %al,$0 x21 n); _asm_(mov $0 x28,%al;out %al,$0 x

25、a1 n); _asm_(mov $0 x04,%al;out %al,$0 x21 n); _asm_(mov $0 x02,%al;out %al,$0 xa1 n); _asm_(mov $0 x1,%al;out %al,$0 x21 n); _asm_(mov $0 x1,%al;out %al,$0 xa1 n); _asm_(mov $0 xfd,%al;out %al,$0 x21 n); _asm_(mov $0 xff,%al;out %al,$0 xa1 n); keyboard_addr = (unsigned long)keyboard_interrupt ; idt

26、0 x21.dword0 = (keyboard_addr idt0 x21.dword1 = (keyboard_addr idt_addr = (unsigned long)idt ; idt_desc0 = 0 x800 + (idt_addr _asm_( lidt %0n sti :=m (idt_desc); while(1); return 0; void keyboard_interrupt() *videomem+ = c; *videomem+ = 0 x1b; 分析分析: (1)在 linux 下編寫好此 c 語(yǔ)言程序,輸入以下命令進(jìn)行編譯: gcc -c xyb.c 其

27、中 -c 表示只編譯不鏈接 ld -o xyb -ttext 0 x9000 -e main xyb.o 其中-o 表示輸出文件名,-ttex 0 x9000 表示程序基址定為 0 x9000 -e main 表示從 main()開始執(zhí)行 objcopy -r .note -r .comment -s -o binary xyb xyb.bin -r .note -r .comment 表示移掉 .note 與 .comment 段 -s 表示移出所有的標(biāo)志及重定位信息 -o binary xyb xyb.bin 表示由 xyb 生成二進(jìn)制文件 xyb.bin (2)代碼用到了內(nèi)嵌匯編,如: _asm_(mov $0 x11,%al;out %al,$0 x20 n); 代表的意思為:將 0 x11 的值發(fā)送到 0 x20 端口中。 (3)程序流程圖: 圖 3.2.1 內(nèi)核程序流程圖 實(shí)模式下引導(dǎo)計(jì)算機(jī)進(jìn)入內(nèi)核 發(fā)送 4 個(gè) icw 對(duì) pic 初始化 設(shè)定中斷屏蔽字,只許鍵盤中斷 設(shè)置鍵盤中斷處理程序位置 獲得整個(gè) idt 的位置描述 用 lidt 指令載入 idt 表 進(jìn)入 while

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論