哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

電子發(fā)燒友App

硬聲App

掃碼添加小助手

加入工程師交流群

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>單片機>匯編+保護模式+教程

匯編+保護模式+教程

2008-10-21 | rar | 13312 | 次下載 | 2積分

資料介紹

九.輸入/輸出保護
為了支持多任務(wù),80386不僅要有效地實現(xiàn)任務(wù)隔離,而且還要有效地控制各任務(wù)的輸入/輸出,避免輸入/輸出沖突。本文將介紹輸入輸出保護。 這里下載本文源代碼。
<一>輸入/輸出保護
80386采用I/O特權(quán)級IPOL和I/O許可位圖的方法來控制輸入/輸出,實現(xiàn)輸入/輸出保護。
1.I/O敏感指令
輸入輸出特權(quán)級(I/O Privilege Level)規(guī)定了可以執(zhí)行所有與I/O相關(guān)的指令和訪問I/O空間中所有地址的最外層特權(quán)級。IOPL的值在如下圖所示的標(biāo)志寄存器中。

標(biāo)? 志
寄存器 BIT31—BIT18 BIT17 BIT16 BIT15 BIT14 BIT13—BIT12 BIT11 BIT10 BIT9 BIT8 BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
00000000000000 V
M R
F 0 N
T IOPL OF D
F I
F T
F S
F Z
F 0 A
F 0 P
F 1 C
F


I/O許可位圖規(guī)定了I/O空間中的哪些地址可以由在任何特權(quán)級執(zhí)行的程序所訪問。I/O許可位圖在任務(wù)狀態(tài)段TSS中。

I/O敏感指令 指令 功能 保護方式下的執(zhí)行條件
CLI 清除EFLAGS中的IF位 CPL<=IOPL
STI 設(shè)置EFLAGS中的IF位 CPL<=IOPL
IN 從I/O地址讀出數(shù)據(jù) CPL<=IOPL或I/O位圖許可
INS 從I/O地址讀出字符串 CPL<=IOPL或I/O位圖許可
OUT 向I/O地址寫數(shù)據(jù) CPL<=IOPL或I/O位圖許可
OUTS 向I/O地址寫字符串 CPL<=IOPL或I/O位圖許可


上表所列指令稱為I/O敏感指令,由于這些指令與I/O有關(guān),并且只有在滿足所列條件時才可以執(zhí)行,所以把它們稱為I/O敏感指令。從表中可見,當(dāng)前特權(quán)級不在I/O特權(quán)級外層時,可以正常執(zhí)行所列的全部I/O敏感指令;當(dāng)特權(quán)級在I/O特權(quán)級外層時,執(zhí)行CLI和STI指令將引起通用保護異常,而其它四條指令是否能夠被執(zhí)行要根據(jù)訪問的I/O地址及I/O許可位圖情況而定(在下面論述),如果條件不滿足而執(zhí)行,那么將引起出錯碼為0的通用保護異常。
由于每個任務(wù)使用各自的EFLAGS值和擁有自己的TSS,所以每個任務(wù)可以有不同的IOPL,并且可以定義不同的I/O許可位圖。注意,這些I/O敏感指令在實模式下總是可執(zhí)行的。
2.I/O許可位圖
如果只用IOPL限制I/O指令的執(zhí)行是很不方便的,不能滿足實際要求需要。因為這樣做會使得在特權(quán)級3執(zhí)行的應(yīng)用程序要么可訪問所有I/O地址,要么不可訪問所有I/O地址。實際需要與此剛好相反,只允許任務(wù)甲的應(yīng)用程序訪問部分I/O地址,只允許任務(wù)乙的應(yīng)用程序訪問另一部分I/O地址,以避免任務(wù)甲和任務(wù)乙在訪問I/O地址時發(fā)生沖突,從而避免任務(wù)甲和任務(wù)乙使用使用獨享設(shè)備時發(fā)生沖突。
因此,在IOPL的基礎(chǔ)上又采用了I/O許可位圖。I/O許可位圖由二進制位串組成。位串中的每一位依次對應(yīng)一個I/O地址,位串的第0位對應(yīng)I/O地址0,位串的第n位對應(yīng)I/O地址n。如果位串中的第位為0,那么對應(yīng)的I/O地址m可以由在任何特權(quán)級執(zhí)行的程序訪問;否則對應(yīng)的I/O地址m只能由在IOPL特權(quán)級或更內(nèi)層特權(quán)級執(zhí)行的程序訪問。如果在I/O外層特權(quán)級執(zhí)行的程序訪問位串中位值為1的位所對應(yīng)的I/O地址,那么將引起通用保護異常。
I/O地址空間按字節(jié)進行編址。一條I/O指令最多可涉及四個I/O地址。在需要根據(jù)I/O位圖決定是否可訪問I/O地址的情況下,當(dāng)一條I/O指令涉及多個I/O地址時,只有這多個I/O地址所對應(yīng)的I/O許可位圖中的位都為0時,該I/O指令才能被正常執(zhí)行,如果對應(yīng)位中任一位為1,就會引起通用保護異常。
80386支持的I/O地址空間大小是64K,所以構(gòu)成I/O許可位圖的二進制位串最大長度是64K個位,即位圖的有效部分最大為8K字節(jié)。一個任務(wù)實際需要使用的I/O許可位圖大小通常要遠小于這個數(shù)目。
當(dāng)前任務(wù)使用的I/O許可位圖存儲在當(dāng)前任務(wù)TSS中低端的64K字節(jié)內(nèi)。I/O許可位圖總以字節(jié)為單位存儲,所以位串所含的位數(shù)總被認為是8的倍數(shù)。從前文中所述的TSS格式可見,TSS內(nèi)偏移66H的字確定I/O許可位圖的開始偏移。由于I/O許可位圖最長可達8K字節(jié),所以開始偏移應(yīng)小于56K,但必須大于等于104,因為TSS中前104字節(jié)為TSS的固定格式,用于保存任務(wù)的狀態(tài)。
1.I/O訪問許可檢查細節(jié)
保護模式下處理器在執(zhí)行I/O指令時進行許可檢查的細節(jié)如下所示。
(1)若CPL<=IOPL,則直接轉(zhuǎn)步驟(8);
(2)取得I/O位圖開始偏移;
(3)計算I/O地址對應(yīng)位所在字節(jié)在I/O許可位圖內(nèi)的偏移;
(4)計算位偏移以形成屏蔽碼值,即計算I/O地址對應(yīng)位在字節(jié)中的第幾位;
(5)把字節(jié)偏移加上位圖開始偏移,再加1,所得值與TSS界限比較,若越界,則產(chǎn)生出錯碼為0的通用保護故障;
(6)若不越界,則從位圖中讀對應(yīng)字節(jié)及下一個字節(jié);
(7)把讀出的兩個字節(jié)與屏蔽碼進行與運算,若結(jié)果不為0表示檢查未通過,則產(chǎn)生出錯碼為0的通用保護故障;
(8)進行I/O訪問。
設(shè)某一任務(wù)的TSS段如下:
TSSSEG????????????????? SEGMENT PARA USE16
??????????????????????? TSS???? <>???????????? ;TSS低端固定格式部分
??????????????????????? DB????? 8 DUP(0)?????? ;對應(yīng)I/O端口00H—3FH
??????????????????????? DB????? 10000000B????? ;對應(yīng)I/O端口40H—47H
??????????????????????? DB????? 01100000B????? ;對用I/O端口48H—4FH
??????????????????????? DB????? 8182 DUP(0ffH) ;對應(yīng)I/O端口50H—0FFFFH
??????????????????????? DB????? 0FFH?????????? ;位圖結(jié)束字節(jié)
TSSLen????????????????? =?????? $
TSSSEG????????????????? ENDS

再假設(shè)IOPL=1,CPL=3。那么如下I/O指令有些能正常執(zhí)行,有些會引起通用保護異常:
??????????????????????? in????? al,21h? ;(1)正常執(zhí)行
??????????????????????? in????? al,47h? ;(2)引起異常
??????????????????????? out???? 20h,al? ;(3)正常實行
??????????????????????? out???? 4eh,al? ;(4)引起異常
??????????????????????? in????? al,20h? ;(5)正常執(zhí)行
??????????????????????? out???? 20h,eax ;(6)正常執(zhí)行
??????????????????????? out???? 4ch,ax? ;(7)引起異常
??????????????????????? in????? ax,46h? ;(8)引起異常
??????????????????????? in????? eax,42h ;(9)正常執(zhí)行

由上述I/O許可檢查的細節(jié)可見,不論是否必要,當(dāng)進行許可位檢查時,80386總是從I/O許可位圖中讀取兩個字節(jié)。目的是為了盡快地執(zhí)行I/O許可檢查。一方面,常常要讀取I/O許可位圖的兩個字節(jié)。例如,上面的第(8)條指令要對I/O位圖中的兩個位進行檢查,其低位是某個字節(jié)的最高位,高位是下一個字節(jié)的最低位??梢娂词怪灰獧z查兩個位,也可能需要讀取兩個字節(jié)。另一方面,最多檢查四個連續(xù)的位,即最多也只需讀取兩個字節(jié)。所以每次要讀取兩個字節(jié)。這也是在判別是否越界時再加1的原因。為此,為了避免在讀取I/O許可位圖的最高字節(jié)時產(chǎn)生越界,必須在I/O許可位圖的最后填加一個全1的字節(jié),即0FFH。此全1的字節(jié)應(yīng)填加在最后一個位圖字節(jié)之后,TSS界限范圍之前,即讓填加的全1字節(jié)在TSS界限之內(nèi)。
I/O許可位圖開始偏移加8K所得的值與TSS界限值二者中較小的值決定I/O許可位圖的末端。當(dāng)TSS的界限大于I/O許可位圖開始偏移加8K時,I/O許可位圖的有效部分就有8K字節(jié),I/O許可檢查全部根據(jù)全部根據(jù)該位圖進行。當(dāng)TSS的界限不大于I/O許可位圖開始偏移加8K時,I/O許可位圖有效部分就不到8K字節(jié),于是對較小I/O地址訪問的許可檢查根據(jù)位圖進行,而對較大I/O地址訪問的許可檢查總被認為不可訪問而引起通用保護故障。因為這時會發(fā)生字節(jié)越界而引起通用保護異常,所以在這種情況下,可認為不足的I/O許可位圖的高端部分全為1。利用這個特點,可大大節(jié)約TSS中I/O許可位圖占用的存儲單元,也就大大減小了TSS段的長度。
<二>重要標(biāo)志保護
輸入輸出的保護與存儲在標(biāo)志寄存器EFLAGS中的IOPL密切相關(guān),顯然不能允許隨便地改變IOPL,否則就不能有效地實現(xiàn)輸入輸出保護。類似地,對EFLAGS中的IF位也必須加以保護,否則CLI和STI作為敏感指令對待是無意義的。此外,EFLAGS中的VM位決定著處理器是否按虛擬8086方式工作。
80386對EFLAGS中的這三個字段的處理比較特殊,只有在較高特權(quán)級執(zhí)行的程序才能執(zhí)行IRET、POPF、CLI和STI等指令改變它們。下表列出了不同特權(quán)級下對這三個字段的處理情況。

不同特權(quán)級對
標(biāo)志寄存器特
殊字段的處理 特權(quán)級 VM標(biāo)志字段 IOPL標(biāo)志字段 IF標(biāo)志字段
CPL=0 可變(初POPF指令外) 可變 可變
0? 不變 不變 可變
CPL>IOPL 不變 不變 不變

從表中可見,只有在特權(quán)級0執(zhí)行的程序才可以修改IOPL位及VM位;只能由相對于IOPL同級或更內(nèi)層特權(quán)級執(zhí)行的程序才可以修改IF位。與CLI和STI指令不同,在特權(quán)級不滿足上述條件的情況下,當(dāng)執(zhí)行POPF指令和IRET指令時,如果試圖修改這些字段中的任何一個字段,并不引起異常,但試圖要修改的字段也未被修改,也不給出任何特別的信息。此外,指令POPF總不能改變VM位,而PUSHF指令所壓入的標(biāo)志中的VM位總為0。
<三>演示輸入輸出保護的實例(實例九)
下面給出一個用于演示輸入輸出保護的實例。演示內(nèi)容包括:I/O許可位圖的作用、I/O敏感指令引起的異常和特權(quán)指令引起的異常;使用段間調(diào)用指令CALL通過任務(wù)門調(diào)用任務(wù),實現(xiàn)任務(wù)嵌套。
1.演示步驟
實例演示的內(nèi)容比較豐富,具體演示步驟如下:
(1)在實模式下做必要準(zhǔn)備后,切換到保護模式;
(2)進入保護模式的臨時代碼段后,把演示任務(wù)的TSS段描述符裝入TR,并設(shè)置演示任務(wù)的堆棧;
(3)進入演示代碼段,演示代碼段的特權(quán)級是0;
(4)通過任務(wù)門調(diào)用測試任務(wù)1。測試任務(wù)1能夠順利進行;
(5)通過任務(wù)門調(diào)用測試任務(wù)2。測試任務(wù)2演示由于違反I/O許可位圖規(guī)定而導(dǎo)致通用保護異常;
(6)通過任務(wù)門調(diào)用測試任務(wù)3。測試任務(wù)3演示I/O敏感指令如何引起通用保護異常;
(7)通過任務(wù)門調(diào)用測試任務(wù)4。測試任務(wù)4演示特權(quán)指令如何引起通用保護異常;
(8)從演示代碼轉(zhuǎn)臨時代碼,準(zhǔn)備返回實模式;
(9)返回實模式,并作結(jié)束處理。

匯編
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1美的電磁爐電路原理圖資料
  2. 4.39 MB   |  16次下載  |  10 積分
  3. 2反激式開關(guān)電源設(shè)計解析
  4. 0.89 MB   |  2次下載  |  5 積分
  5. 3簡易光伏控制器原理圖資料
  6. 0.07 MB   |  1次下載  |  5 積分
  7. 4TPS23755數(shù)據(jù)手冊
  8. 0.07 MB   |  次下載  |  免費
  9. 536伏,10兆赫茲低噪聲雙運算放大器COS5532 技術(shù)手冊
  10. 0.41 MB   |  次下載  |  免費
  11. 6LM5176 55V 寬輸入電壓同步4開關(guān)降壓/升壓控制器技術(shù)手冊
  12. 2.40 MB   |  次下載  |  免費
  13. 7MCU模塊原理圖資料
  14. 0.37 MB   |  次下載  |  1 積分
  15. 8LoRa1121 FCC&amp;CE認證 多頻段LoRa無線通訊模塊規(guī)格書
  16. 997.05 KB  |  次下載  |  免費

本月

  1. 1美的電磁爐電路原理圖資料
  2. 4.39 MB   |  16次下載  |  10 積分
  3. 2冷柜-電氣控制系統(tǒng)講解
  4. 13.68 MB  |  7次下載  |  10 積分
  5. 3SDFM 激光測距模塊模組手冊
  6. 0.54 MB   |  7次下載  |  免費
  7. 4直流電路的組成和基本定律
  8. 1.67 MB   |  4次下載  |  免費
  9. 5SW6238V ACCC 三 PD 四口多協(xié)議移動電源 SOC規(guī)格書
  10. 0.59 MB   |  4次下載  |  1 積分
  11. 6安川A1000變頻器中文版說明書
  12. 20.16 MB  |  3次下載  |  3 積分
  13. 7IP6742_datasheet_100V8A 同步 BUCK 控制器
  14. 2.16 MB  |  3次下載  |  免費
  15. 8PAW3395DM-T6QU:光學(xué)游戲?qū)Ш叫酒謨?/a>
  16. 1.26 MB   |  2次下載  |  10 積分

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935137次下載  |  10 積分
  3. 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計
  4. 1.48MB  |  420064次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233094次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費下載
  8. 340992  |  191448次下載  |  10 積分
  9. 5十天學(xué)會AVR單片機與C語言視頻教程 下載
  10. 158M  |  183360次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81605次下載  |  10 積分
  13. 7Keil工具MDK-Arm免費下載
  14. 0.02 MB  |  73829次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65991次下載  |  10 積分
淮安市| 青河县| 克山县| 孙吴县| 鹤壁市| 乌拉特前旗| 微山县| 镶黄旗| 洛川县| 中山市| 杭锦后旗| 二连浩特市| 张家川| 忻城县| 葫芦岛市| 布尔津县| 德庆县| 庐江县| 兴海县| 河南省| 乐亭县| 马边| 钟山县| 定远县| 湾仔区| 许昌县| 黄陵县| 兖州市| 沙河市| 平和县| 宜宾县| 东城区| 马鞍山市| 平塘县| 克什克腾旗| 岳普湖县| 湖口县| 惠水县| 专栏| 东乡县| 越西县|