org 07c00h ;這是告訴編譯器將這段程式載入到記憶體偏移位址0x7c00處
mov ax,cs
mov ds,ax
mov es,ax
call dispstr
jmp $
dispstr:
mov ax,bootmessage
mov bp,ax
mov cx,16
mov ax,01301h
mov bx,000ch
mov dl,0
int 10h
retbootmessage: db "hello,os world!"
times 510-($-$$) db 0
dw 0xaa55
這是第一章的程式,從中可以看出起始位置是07c00h,程式的結束標誌是0xaa55。
$表示當前行被彙編後的位址。
$$表示乙個節的開始處被彙編後的位址。
那麼$-$$表示本行距離程式開始處的相對距離。
1.對於程式的說明
實際上以上程式只是乙個引導扇區(boot sector),不是完整的os,當計算機電源被開啟時,它會加電自檢(post),然後尋找啟動盤,如果是從軟盤啟動,計算機就會檢查軟盤的0面0磁軌1扇區,如果發現它以0xaa55結束,並且包含了少於節的執行碼,那麼bios認為它是乙個引導扇區。
一旦發現了引導扇區,就將這節放入記憶體位址0000:7c00處,然後跳轉並且移交控制器。
2.製作軟盤過程
本身這段程式是boot.asm,是匯程式設計序,然後使用工具nasm將其轉換為boot.bin,
然後使用軟盤絕對扇區讀寫工具將這個檔案寫到一張空白軟盤的第乙個扇區。
(.bin檔案的說明:*.
bin是foxbase定義的一種特殊的可執行檔案,它同dos的.com檔案類似,區別在於.com檔案是從100h開始執行的,而.
bin從0開始,.bin的呼叫引數儲存在ds:bx中。
如果在foxbase中,你可以使用call命令呼叫。如果你在vfp中,將無法直接呼叫,只能使用debug反彙編,分析其功能,然後重新編寫.)
3.方括號的使用
在nasm中,任何不被方括號括起來的標籤或變數名都被認為是位址,訪問標籤中的內容必須使用。
1.對於這一節的程式的理解
資料區:
先是定義了一些描述符(label_gdt,label_desc_code32,label_desc_video),
然後定義了gdtptr,它是乙個6位元組的資料結構,前兩位元組表示gdt的界限(即描述符的界限),後4位元組表示gdt的基位址(gdtptr就是用來描述gdt的,會用乙個暫存器gdtr來儲存它的值)。然後定義兩個選擇子,分別指向已定義的描述符。
**區:
初始化32位**段描述符,為載入gdtr作準備,載入gdtr: lgdt [gdtptr],然後是關中斷:cli,(保護模式下中斷處理的機制是不同的,不關中斷會出錯)開啟位址線a20,然後將cr0的pe位置為1(0:
實模式,1:保護模式),準備切換到保護模式,跳轉到保護模式中 jmp dword selectorcode32:0
是乙個巨集,它是乙個8位元組的資料結構。三個描述符組成了乙個結構陣列。
3.[bits 16]說明這是乙個16位的**段,而[bits 32]是32位的**段。
程式中的知識點
要搞清楚的有:
gdt是乙個索引,指向乙個資料結構的表項。gdt作用:提供段式儲存機制。
程式對gdt做了什麼?
jmp selectorcode32:0?
gdt1.在保護模式下,cpu有著巨大的定址能力(保護模式下為4g,實模式下為1m),並為強大的32位作業系統提供了更好的硬體保障。
2.在保護模式下,段值僅僅變成了乙個索引,這個索引指向乙個資料結構的乙個表項,表項中定義了段的起始位址、界限、屬性等內容。這個資料結構就叫gdt,表項就叫描述符。
3.描述符分為**段和資料段描述符,還可以分為系統段描述符和門描述符。
4.選擇子
ti位 0:gdt,1:ldt
當ti和rpl都為0時,選擇子就變為了偏移。
5."段:偏移"經過段機制轉化為「線性位址」,而不是實體地址。
jmp1.對於cr0的設定是實模式和保護模式的關鍵
2.jmp dword selectorcode32:0的作用是將描述符desc_code32對應的段的首位址。
3.為什麼那兒有乙個dword呢?(沒有dword的話編譯出來是16位的**,而目標位址是32位的。)
進入保護模式的主要步驟:
1.準備gdt
2.用lgdt載入gdtr
3.開啟a20
4.設定cr0的pe位
5.跳轉,進入保護模式
描述符的屬性
1.p位——存在位。p=1,表示在段記憶體中存在;p=0則在記憶體中不存在。
2.dpl位——描述符特權級。有0,1,2,3級,數字越小級別越大
3.s位——指明描述符是資料段/**段(s=1),還是系統段/門描述符(s=0)
3.2保護模式高階
在這一節中,首先在上一節程式的基礎上改寫:
(1)跳入保護模式之後再次跳回實模式
(2)讀寫大位址記憶體
對於讀大位址內容,它是先讀,然後再寫,然後再讀,以此來判斷是否可以讀寫大位址記憶體。
(注意:程式中呼叫子程式時要儲存edi的值,要對其進行壓棧,所以要用到堆疊,那麼在程式中也要有堆疊的描述符和堆疊的選擇子。)
從保護模式跳轉到實模式時要複雜一些(從實模式到保護模式只要乙個跳轉就可以了),我們不能直接從32位的**段中返回實模式,只能從16位**段中返回,因為無法從32為**段返回時cs快取記憶體暫存器中的屬性符合實模式的要求。所以增加乙個normal描述符,在返回實模式前把對應的選擇子載入到ds、ss和es.
跳回實模式之後要做的事情:用normal描述符的選擇子載入到ds、ss和es,值cr0的pe=0,關閉a20位址線,開中斷sti。
ldt:區域性描述符表
1.ldt與gdt差不多,乙個是全域性的,乙個是區域性的。在**中也要有乙個ldt的描述符和選擇子,它的初始化有所不同,有兩步:
(1)初始化ldt在gdt中的描述符,(2)初始化ldt中的描述符。其中,第二步與gdt類似,多了乙個在gdt中定義ldt。
2.ldt與gdt的區別就在於選擇子中ti位(0為gdt,1為ldt)
3.在使用ldt時需要先用lldt指令載入ldtr(lgdt載入gdtr)
4.使用ldt的目的:多工處理。
5.保護模式「保護」的含義
(1)描述符中的段基址和段界限定義了乙個段的範圍,對超越段界限之外的位址的訪問是被禁止的,這是對段的一種保護。
(2)有點複雜的段屬性作為對乙個段各個方面的定義規定和限制了段的行為和性質
以上兩點是靜態的
(3)在涉及特權級的每一步中,處理器都會對cpl,dpl和rpl等內容進行比較,這種比較是動態的。
特權級概述
1.常規保護模式錯誤
2.將level0叫做核心,level1、level2叫做服務,level3叫做應用程式。
3.cpl、dpl、rpl
cpl 是當前執行的程式或任務的特權級。通常情況下,cpl等於**所在段的特權級,
當程式轉移到不同特權級的**段時,處理器將改變cpl。當處理器訪問乙個與cpl特權級不同的一致**段時,cpl不會被改變。
dpl 表示段或者門的特權級,下面是各種型別的段或者門的情況
資料段:高階->低階,相同級別之間
非一致**段:相同級別之間
呼叫門:與資料段一致
一致**段和通過呼叫門訪問的非一致**段:低階->高階,相同級別之間
tss(task-state stack:任務狀態棧):與資料段一致
rpl 通過選擇子的第0位和第1位表現出來的。作業系統過程往往用rpl來避免低特權級應用程式訪問高特權級段內的資料。
4.不同特權級**之間的轉移
程式從乙個**轉移到另乙個**之前,目標**的選擇子將會被載入到cs中。通常使用jmp和call指令來實現轉移,轉移分為兩大類:(1)直接轉移2)間接轉移
特權級轉移
1.如果目標是非一致**段,要求cpl必須等於目標**段的dpl,同時要求rpl小於等於dpl。如果目標是一致**段,要求cpl大於或者等於目標段的dpl,rpl此時不做檢查。
這種直接轉移是非常有限的,為了實現不同特權級之間的轉移,可以使用門描述符或者tss。
2.門是一種描述符,它由乙個選擇子和乙個偏移所指定的線性位址。
門的種類:呼叫門,中斷門,陷阱門,任務門。
作用:實現不同特權級之間的轉換。
在原程式的基礎上做的一些工作:定義門描述符及其選擇子,初始化描述符,使用call指令來實現跳轉到已經定義好的通過門描述符能夠跳轉到的目標段。
門實際上是乙個入口位址,只不過增加了若干的屬性而已。
3.門轉移總結:
通過呼叫門和call指令,可以實現從低特權級到高特權級的轉移,無論目標**是一致的還是非一致的。我們的目標是從低到高,在從高到低,那麼下面的任務就是如何從高到低了。
4.長的和短的jmp和call的區別:對jmp而言,短跳轉對應段內,長跳轉對應段間; call要複雜一些,因為call指令會影響堆疊。
5. 在使用call指令時,由於某些原因堆疊發生了切換,也就是說call指令執行前後的堆疊已經不是同乙個。intel提供了一種機制,將堆疊a的諸多內容賦值到堆疊b中。
事實上,由於每乙個任務最多可能在4個特權級間轉移,所以,每個任務實際上需要4個堆疊,此時要用到一種資料結構,即tss(task-state stack)。
6.綜合:使用呼叫門的過程實際上分為兩個部分,一部分是從低特權級到高特權級,通過呼叫門和call指令來實現;另一部分則是從高特權級到低特權級,通過ret指令來實現。
西南交通大學電子工藝實習報告
2011年度暑期實習報告 實習名稱 院 系 專業 年級 指導老師 姓名 學號 1 了解萬用表的基本知識,通過具體的電路圖,初步掌握焊接技術,簡單 電路元器件裝配,對故障的診斷和排除以及對萬用表原理工作的熟悉。2 熟悉電子裝焊工藝的基本知識和原理,掌握焊接技術並組裝萬用表。3 了解安全用電知識,學習安...
西南交通大學封面個人簡歷
姓名 杜宗飛專業 電腦科學與技術 學院 數理資訊學院學歷 本科 手機 e mail 位址 西南交通大學 自薦信尊敬的領導 您好!今天我懷著對人生事業的追求,懷著激動的心情向您毛遂自薦,希望您在百忙之中給予我片刻的關注。我是西南交通大學電腦科學與技術專業的2014屆畢業生。西南交通大學大學四年的薰陶,...
西南交通大學EMBA入學申請表
入學申請表 application form 高階管理人員工商管理碩士 emba 西南交通大學 入學資格 獲得由中國教育部認可的本科學歷以及學士學位或等同本科學歷的專業資格 一般應具有至少7年的相關工作經驗 畢業後計起 而其中5年必須居於管理職層 現居於高階管理職層。填妥的申請表 身份證影印件 個人...