欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
80386ASM程序設計基礎(十)
主要介紹段描述符,段選擇子
   在保護模式下,段是實(shí)現虛擬地址到線(xiàn)性地址轉換的基礎。在保護方下,每個(gè)段有三個(gè)參數:段基址,段界限,段屬性。段基址規定了線(xiàn)性地址空間中段的開(kāi)始地址,段基址長(cháng)度為32位,所以任何一個(gè)段都可以從32位線(xiàn)性地址空間中的任何一個(gè)字節開(kāi)始,這一點(diǎn)和實(shí)式方式不同,實(shí)式方式下要求段的邊界必須被16整除。段界限規定段的大小,段界限用20位表示,而且段界限可以是字節或4K為單位,這個(gè)稱(chēng)為段的粒度。當段界限以字節為單位時(shí),那么段的范圍是1字節至1M字節;當段界限是以4K字節為單位時(shí),那么段的范圍是4K至4G。段的界限同時(shí)也是用來(lái)校驗偏移地址的合法性,比如說(shuō)段A的基址為00123456H,段界限為1000H,如果段界限以字節為單位,那么段的范圍是00123456H-00124456H;如果段界限以4K字節為單位,那么段的范圍是00123456H-00223456H。事實(shí)上,段的界限也可以用來(lái)校驗偏移地址的合法性,上面的例子中界限為1000H,那么偏移地址的范圍就是0-1000H,如果偏移地址不在這個(gè)范圍內那就會(huì )引起異常。需要說(shuō)明的是,數據段有點(diǎn)特殊,因為數據段的偏移范圍不僅僅是由段界限來(lái)決定,還要由段的擴展方向(Extension Direction)來(lái)決定,因為要照顧到堆棧段(堆棧段是一種特殊的數據段,它是向低端地址擴展的),如果段界限為L(cháng)imit,段的擴展方向為向高端地址擴展的話(huà),那么我們可以斷定它是一普通的數據段,0-Limit是有效的偏移范圍,而Limit以上屬于無(wú)效的偏移范圍;如果段界限為L(cháng)imit,段的擴展方向為向低端地址擴展的話(huà),那么可以斷定它是一堆棧段,此時(shí)0-Limit是無(wú)效的偏移范圍,Limit以上則屬于有效的偏移范圍,正好和向高端地址擴展的普通數據段相反。除了堆棧段以外,其它的段均是自然向高端擴展。
   段基址,段界限及段屬性這三個(gè)參數在保護模式下用描述符來(lái)描述,每個(gè)描述符的長(cháng)度為8個(gè)字節,每個(gè)段都有一個(gè)對應的描述符。在保護模式下有三種描述符:存儲段描述符,系統段描述符,門(mén)描述符。
   A.存儲段描述符:存儲段是指程序直接執行的代碼段和數據段,存儲段描述符是用來(lái)描述存儲段的,也可以說(shuō)是用來(lái)描述代碼和數據段的,它的長(cháng)度為8個(gè)字節,該描述符結構示意圖:
   
    第7字節  第6字節  第5字節     第4字節  第3字節  第2字節   第1字節  第0字節
   |--------|------------------|-----------------------------|-----------------|
   |段基址的|                  |                             |                 |
   |高8位   |Segment Attributes|       段基址的低24位        | 段界限的低16位  |
   | 24~31  |   段屬性,占用兩 |         0~23                |      0~15       |
   |        |   個(gè)字節         |                             |                 |
   |--------|------------------|-----------------------------|-----------------|
            |                  |
            |                  |
   _________|                  |_____________________________
   | 15  14 13  12 11            8 7 6     5   3           0|
   |---|---|---|---|-------------|---|--- -|---|------------|
   | G | D |0  |AVL|段界限的高4位| P | DPL |DT |    TYPE    |
   |---|---|---|---|--- ---------|---|-----|---|------------|
  
   段基址和段界限都被安排在描述符的兩個(gè)域中,主要是來(lái)看段的屬性:
   a.G(第15位),這是段界限粒度,即是說(shuō)段界限到底是以字節為單還是以4K字節為單位。G=0表示段界限是字節,G=1表示段界限為4K字節。
   b.D(第14位),D是一個(gè)很特殊的位,在描述可執行段,向低擴展數據段或者由SS寄存器尋址的段。在描述可執行段的描述符中,D位決定了指令使用的地址及操作數據默認的大小,D=1表示默認情況下使用32位地址及32位或8位操作數,這樣的代碼段稱(chēng)為32位代碼段;D=0表示默認情況下使用16位地址及16位操作數或8位操作數,這樣的代碼段稱(chēng)為16位代碼段;在向低擴展的數據段中,D=1表示段的上部界限為4G,D=0表示段的上部界限為64K;在描述由SS寄存器尋址的段中,該位決定使用隱式的堆棧訪(fǎng)問(wèn)指令使用何種堆棧指針寄存器。D=1表示使用32位堆棧指針寄存器ESP,D=0表示使用16位堆棧指針寄存器SP,隱式的堆棧訪(fǎng)問(wèn)指令指的是那些指令中沒(méi)有明顯對SP或ESP進(jìn)行操作的指令,比如說(shuō)PUSH,POP,PUSHA,POPA,PUSHAD,POPAD都屬于隱式的堆棧訪(fǎng)問(wèn)指令。
   c.0(第13位),這一位恒為0,為80386以后的處理器保留的。
   d.AVL(第12位),軟件可利用位,主要是為了保持和以后的處理兼容。
   e.第11位到第8位是段界限的高4位。
   f.P(第7位),存在位,P=1表示描述符對轉換地址有效。P=0表示描述符對轉換地址無(wú)效,如果使用該描述符將會(huì )引起異常。   
   g.DPL(Descriptor Privelege Level)描述符特權級,共2位,它規定了所述段的特權級別,用于特權檢查,以決定是否能對該段進(jìn)行訪(fǎng)問(wèn)。
   h.DT(Descriptor Type)描述符的類(lèi)型,DT=0表示存儲段描述符,DT=0表示系統段描述符和門(mén)描述符。
   i.TYPE,共4位,說(shuō)明存儲段的具體屬性:
     TYPE0:指示描述符是否被訪(fǎng)問(wèn),用A標記,A=0表示描述符未被訪(fǎng)問(wèn),A=1表示描述符已被訪(fǎng)問(wèn)。
     TYPE1:根據TYPE3來(lái)確定。
     TYPE2:根據TYPE3來(lái)確定。
     TYPE3:指示描述符所描述的段是數據段還是代碼段,用E標記。E=0表示是不可執行段,是數據段,對應的描述符也就是數據段描述符。E=1表示是可執行段,也就是代碼段,對就的描述符也就是代碼段描述符。
     如果TYPE3=0,也就是說(shuō)描述符是數據段描述符,那么TYPE1指示該數據段是否可寫(xiě),用W標記。W=0表示對應的數據段不可寫(xiě),只讀。W=1表示對應的數據段可寫(xiě)。TYPE2則指示數據段的擴展方向,用ED標記。ED=0表示向高端擴展,ED=1表示向低端擴展。
     如果TYPE3=1,也就是說(shuō)描述符是代碼段描述符,那么TYPE1指示該代碼段是否可讀,用符號R標記。R=0表示對應的代碼段不可讀,只能執行,R=1表示對應的代碼可讀可執行。TYPE2則指示所描述的代碼段是否是一致代碼段,用C表示。C=0表示代碼段不是一致代碼段,C=1表示是一致代碼段。
     TYPE3-TYPE0這四位可以列成一個(gè)表:
     ___________________________________________________________________________________
    |0000 |只讀                                                                        |
    |_____|____________________________________________________________________________|
    |0001 |只讀,已訪(fǎng)問(wèn)                                                                |
    |_____|____________________________________________________________________________|
    |0010 |可讀,可寫(xiě)                                                                  |
    |_____|____________________________________________________________________________|
    |0011 |讀寫(xiě),已訪(fǎng)問(wèn)                                                                |
    |_____|____________________________________________________________________________|
    |0100 |只讀,向低擴展                                                              |
    |_____|____________________________________________________________________________|
    |0101 |只讀,向低擴展                                                              |
    |_____|____________________________________________________________________________|
    |0110 |讀/寫(xiě),向低擴展                                                             |
    |_____|____________________________________________________________________________|
    |0111 |讀/寫(xiě),向低擴展,已訪(fǎng)問(wèn)                                                     |  
    |_____|____________________________________________________________________________|
    |1000 |只執行                                                                      |
    |_____|____________________________________________________________________________|
    |1001 |只執行,已訪(fǎng)問(wèn)                                                              |
    |_____|____________________________________________________________________________|
    |1010 |可執行,可讀                                                                |
    |_____|____________________________________________________________________________|
    |1011 |可執行,可讀,已訪(fǎng)問(wèn)                                                        |
    |_____|____________________________________________________________________________|
    |1100 |只執行,一致代碼段                                                          |
    |_____|____________________________________________________________________________|
    |1101 |只執行,一致代碼段,已訪(fǎng)問(wèn)                                                  |
    |_____|____________________________________________________________________________|
    |1110 |可執行,可讀,一致代碼段                                                    |
    |_____|____________________________________________________________________________|
    |1111 |可執行,可讀,一致代碼段,已訪(fǎng)問(wèn)                                            |
    |_____|____________________________________________________________________________|                                        
    存儲段描述符的結構可以這樣定義:
    DESCRIPTOR STRUCT
    Segment_LimitL16 DW 0;段界限的低16位   
    Segment_BaseL16 DW 0;段基址的低16位
    Segment_BaseM8 DB 0;段基址的中間8位
    Segment_BaseH8 DB 0;段基址的高8位
    Segment_Attributes DW 0;段屬性
    DESCRIPTOR ENDS
    一個(gè)任務(wù)有多個(gè)段,每個(gè)段都有一個(gè)描述符。因此在80386下,為了方便管理這些段描述符,將描述符組成一個(gè)線(xiàn)性表,稱(chēng)之為描述符表。在80386下有三種描述符表:GDT(Global Descriptor Table),LDT(Local Descriptor Table),IDT(Interrupt Descriptor Table)。在整個(gè)系統中全局描述符表GDT和中斷描述符表只有一張,局部描述符表可以由若干張。每個(gè)描述符表都形成一個(gè)特殊的16位數據段,這樣的特殊數據段最多可以有8192個(gè)描述符,具體使用哪一個(gè)段描述符,由段的選擇子來(lái)確定。每個(gè)任務(wù)都有自已的局部描述符表LDT,它包含自已的代碼段,數據段,堆棧段,也包含該任務(wù)使用的一些門(mén)描述符。隨著(zhù)任務(wù)的切換,LDT也跟著(zhù)切換。GDT包含每一個(gè)任務(wù)都可能或可以訪(fǎng)問(wèn)的段的描述符,通常包含描述操作系統所用的代碼段,數據段以及堆棧段的描述符,也包含描述任務(wù)LDT的描述符。在任務(wù)切換時(shí),并不切換GDT。一個(gè)任務(wù)的整個(gè)虛擬地址空間可以分為相等的兩半,一半空間的描述符在全局描述符表GDT中,一半空的描述符在局部描述符表LDT中。由于全局描述符表和局部描述符表都可以包含最多為8192個(gè)描述符,而每個(gè)描述符所描述的段的最大長(cháng)度為4G,因此最大的虛擬地址空間為:8192*4G*2=64TB。
   段選擇子用來(lái)確定使用描述符表中的哪一個(gè)描述符。實(shí)式模式下邏輯地址由段地址*16再加上段內偏移地址;保護模式下虛擬地址空間由段選擇子和段內偏移來(lái)確定,和實(shí)式模式比較,段選擇子代替了段值,實(shí)際上通過(guò)段選擇子就可以確定了段基址。選擇子的高13位是描述符表中的索引號,用來(lái)確定描述符,因為是13位,所以說(shuō)最多可以有2的13次方8192個(gè)描述符,索引號:0-8191。標記TI指示是從全局描述符中讀取描述符還是從局部描述符表中讀取描述符。TI=0指示是從全局描述符表中讀取描述符,TI=1指示從局部描述符表讀取描述符。RPL表示請求特權級,用于特權檢查。假設段選擇子為88H,則表示請求的特權級別是0,從全局描述表中讀取描述表,描述符的索引號為11H。有一個(gè)特殊的選擇子稱(chēng)為空選擇子,它的Index=0(即高13位為0),TI=0,RPL則可以為任意值。當用空選擇子對存儲器進(jìn)行訪(fǎng)問(wèn),會(huì )出現異常??者x擇子對應于全局描述表中的第0個(gè)描述符,因此全局描述符表中的第0個(gè)描述符總是不會(huì )被訪(fǎng)問(wèn)。如果TI=1,那么就不是空選擇子,它指定的是當前局部描述符表中的第0個(gè)描述符。為了更快地從段選擇子中獲得段的基本信息(段基址,段界限,段屬性),從80386開(kāi)始為每個(gè)段寄存器在硬件上配備了段描述符高速緩沖存儲器,對我們寫(xiě)程序的人來(lái)講,它是不可編程的。有了這種高速緩沖寄存器后,每當將選擇子裝入段寄存器后,處理器將自動(dòng)裝入描述符表中相應的描述符,并將描述表的信息裝入到高速緩沖寄存器,這樣可以加快訪(fǎng)問(wèn)速度,以下是段選擇子的結構示意圖:
  
   15________________________________________________________________3__2__1_____0 
  |                                                                |TI |  RPL   |
   |________________________________________________________________|___|________|
 
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
0x86保護模式系列教程---- 二.分段管理機制
徹底搞懂虛擬內存,虛擬地址,虛擬地址空間
操作系統原理詳解匯編語(yǔ)言基礎知識(圖文代碼) (堆棧的初始化時(shí)通過(guò)設置SS及SP值來(lái)完成的可以由編譯系統自動(dòng)完成也可以在程序中通過(guò)偽指令顯示地定義)
Linux0.11小結
32位cpu尋址小結
《自己動(dòng)手寫(xiě)操作系統》第三章第一節是《認識保護模式》
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久