亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

蟲蟲首頁| 資源下載| 資源專輯| 精品軟件
登錄| 注冊(cè)

一鍵觸控感應(yīng)(yīng)開(kāi)關(guān)(guān)

  • 題目:加密軟件 要求:(1)輸入任意一段明文M

    題目:加密軟件 要求:(1)輸入任意一段明文M,以及密鑰K (2)根據(jù)一下公式將其轉(zhuǎn)換為密文C。 Ci = mi + K ,其中i = 0,1,……n-1 , K 為密鑰; (3)具有輸入輸出界面。

    標(biāo)簽: 加密軟件 輸入

    上傳時(shí)間: 2013-11-25

    上傳用戶:shawvi

  • learningMatlab PhÇ n 1 c¬ së Mat lab Ch­ ¬ ng 1:

    learningMatlab PhÇ n 1 c¬ së Mat lab Ch­ ¬ ng 1: Cµ i ® Æ t matlab 1.1.Cµ i ® Æ t ch­ ¬ ng tr×nh: Qui tr×nh cµ i ® Æ t Matlab còng t­ ¬ ng tù nh­ viÖ c cµ i ® Æ t c¸ c ch­ ¬ ng tr×nh phÇ n mÒ m kh¸ c, chØ cÇ n theo c¸ c h­ íng dÉ n vµ bæ xung thª m c¸ c th« ng sè cho phï hî p. 1.1.1 Khë i ® éng windows. 1.1.2 Do ch­ ¬ ng tr×nh ® ­ î c cÊ u h×nh theo Autorun nª n khi g¾ n dÜ a CD vµ o æ ® Ü a th× ch­ ¬ ng tr×nh tù ho¹ t ® éng, cö a sæ

    標(biāo)簽: learningMatlab 172 199 173

    上傳時(shí)間: 2013-12-20

    上傳用戶:lanwei

  • 任務(wù):一堆猴子都有編號(hào)

    任務(wù):一堆猴子都有編號(hào),編號(hào)是1,2,3 ...m ,這群猴子(m個(gè))按照1-m的順序圍坐一圈,從第1開始數(shù),每數(shù)到第N個(gè),該猴子就要離開此圈,這樣依次下來,直到圈中只剩下最后一只猴子,則該猴子為大王。 功能:輸入數(shù)據(jù):輸入m,n(m,n 為整數(shù)且n<m) 輸出形式:中文提示按照m個(gè)猴子,數(shù)n 個(gè)數(shù)的方法,輸出為大王的猴子是幾號(hào) ,建立一個(gè)函數(shù)來實(shí)現(xiàn)此功能

    標(biāo)簽:

    上傳時(shí)間: 2014-01-25

    上傳用戶:athjac

  • 運(yùn)動(dòng)會(huì)源代碼

    #include <malloc.h>       #include <stdio.h>       #include <stdlib.h>       #include <string.h>       #define NULL 0      #define MaxSize 30          typedef struct athletestruct /*運(yùn)動(dòng)員*/     {         char name[20];          int score; /*分?jǐn)?shù)*/         int range; /**/         int item; /*項(xiàng)目*/     }ATH;     typedef struct schoolstruct /*學(xué)校*/     {         int count; /*編號(hào)*/         int serial; /**/          int menscore; /*男選手分?jǐn)?shù)*/         int womenscore; /*女選手分?jǐn)?shù)*/         int totalscore; /*總分*/         ATH athlete[MaxSize]; /**/         struct schoolstruct *next;      }SCH;         int nsc,msp,wsp;      int ntsp;      int i,j;      int overgame;      int serial,range;      int n;      SCH *head,*pfirst,*psecond;      int *phead=NULL,*pafirst=NULL,*pasecond=NULL;     void create();         void input ()     {         char answer;          head = (SCH *)malloc(sizeof(SCH)); /**/         head->next = NULL;         pfirst = head;          answer = 'y';         while ( answer == 'y' )         {         Is_Game_DoMain:         printf("\nGET Top 5 when odd\nGET Top 3 when even");         printf("\n輸入運(yùn)動(dòng)項(xiàng)目序號(hào) (x<=%d):",ntsp);         scanf("%d",pafirst);         overgame = *pafirst;         if ( pafirst != phead )         {             for ( pasecond = phead ; pasecond < pafirst ; pasecond ++ )             {                 if ( overgame == *pasecond )                 {                     printf("\n這個(gè)項(xiàng)目已經(jīng)存在請(qǐng)選擇其他的數(shù)字\n");                     goto Is_Game_DoMain;                 }             }         }         pafirst = pafirst + 1;         if ( overgame > ntsp )         {             printf("\n項(xiàng)目不存在");             printf("\n請(qǐng)重新輸入");             goto Is_Game_DoMain;         }         switch ( overgame%2 )         {         case 0: n = 3;break;         case 1: n = 5;break;         }         for ( i = 1 ; i <= n ; i++ )         {         Is_Serial_DoMain:         printf("\n輸入序號(hào) of the NO.%d (0<x<=%d): ",i,nsc);                 scanf("%d",&serial);         if ( serial > nsc )          {             printf("\n超過學(xué)校數(shù)目,請(qǐng)重新輸入");             goto Is_Serial_DoMain;         }         if ( head->next == NULL )          {             create();         }         psecond = head->next ;          while ( psecond != NULL )          {             if ( psecond->serial == serial )             {                 pfirst = psecond;                 pfirst->count = pfirst->count + 1;                 goto Store_Data;             }             else             {                 psecond = psecond->next;             }         }         create();         Store_Data:                 pfirst->athlete[pfirst->count].item = overgame;         pfirst->athlete[pfirst->count].range = i;         pfirst->serial = serial;         printf("Input name:) : ");                 scanf("%s",pfirst->athlete[pfirst->count].name);         }         printf("\n繼續(xù)輸入運(yùn)動(dòng)項(xiàng)目(y&n)?");         answer = getchar();         printf("\n");         }     }         void calculate() /**/     {         pfirst = head->next;         while ( pfirst->next != NULL )         {             for (i=1;i<=pfirst->count;i++)             {                 if ( pfirst->athlete[i].item % 2 == 0 )                  {                     switch (pfirst->athlete[i].range)                     {                     case 1:pfirst->athlete[i].score = 5;break;                     case 2:pfirst->athlete[i].score = 3;break;                     case 3:pfirst->athlete[i].score = 2;break;                     }                 }                 else                  {                     switch (pfirst->athlete[i].range)                     {                     case 1:pfirst->athlete[i].score = 7;break;                     case 2:pfirst->athlete[i].score = 5;break;                     case 3:pfirst->athlete[i].score = 3;break;                     case 4:pfirst->athlete[i].score = 2;break;                     case 5:pfirst->athlete[i].score = 1;break;                     }                 }                 if ( pfirst->athlete[i].item <=msp )                  {                     pfirst->menscore = pfirst->menscore + pfirst->athlete[i].score;                 }                 else                  {                     pfirst->womenscore = pfirst->womenscore + pfirst->athlete[i].score;                 }             }             pfirst->totalscore = pfirst->menscore + pfirst->womenscore;             pfirst = pfirst->next;         }     }         void output()     {         pfirst = head->next;         psecond = head->next;         while ( pfirst->next != NULL )          {             // clrscr();              printf("\n第%d號(hào)學(xué)校的結(jié)果成績(jī):",pfirst->serial);             printf("\n\n項(xiàng)目的數(shù)目\t學(xué)校的名字\t分?jǐn)?shù)");             for (i=1;i<=ntsp;i++)              {                 for (j=1;j<=pfirst->count;j++)                  {                     if ( pfirst->athlete[j].item == i )                     {                                                                         printf("\n %d\t\t\t\t\t\t%s\n %d",i,pfirst->athlete[j].name,pfirst->athlete[j].score);break;                                             }                 }             }             printf("\n\n\n\t\t\t\t\t\t按任意建 進(jìn)入下一頁");             getchar();             pfirst = pfirst->next;         }     //  clrscr();          printf("\n運(yùn)動(dòng)會(huì)結(jié)果:\n\n學(xué)校編號(hào)\t男運(yùn)動(dòng)員成績(jī)\t女運(yùn)動(dòng)員成績(jī)\t總分");         pfirst = head->next;         while ( pfirst->next != NULL )         {             printf("\n %d\t\t %d\t\t %d\t\t %d",pfirst->serial,pfirst->menscore,pfirst->womenscore,pfirst->totalscore);             pfirst = pfirst->next;         }         printf("\n\n\n\t\t\t\t\t\t\t按任意建結(jié)束");         getchar();     }         void create()     {                 pfirst = (struct schoolstruct *)malloc(sizeof(struct schoolstruct));         pfirst->next = head->next ;         head->next = pfirst ;                 pfirst->count = 1;         pfirst->menscore = 0;         pfirst->womenscore = 0;         pfirst->totalscore = 0;     }     void Save()     {FILE *fp;     if((fp = fopen("school.dat","wb"))==NULL)     {printf("can't open school.dat\n");     fclose(fp);     return;     }     fwrite(pfirst,sizeof(SCH),10,fp);     fclose(fp);     printf("文件已經(jīng)成功保存\n");     }         void main()     {         system("cls");         printf("\n\t\t\t 運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)\n");         printf("輸入學(xué)校數(shù)目 (x>= 5):");         scanf("%d",&nsc);          printf("輸入男選手的項(xiàng)目(x<=20):");         scanf("%d",&msp);          printf("輸入女選手項(xiàng)目(<=20):");         scanf("%d",&wsp);          ntsp = msp + wsp;                  phead = (int *)calloc(ntsp,sizeof(int));         pafirst = phead;         pasecond = phead;         input();         calculate();          output();         Save();     }             

    標(biāo)簽: 源代碼

    上傳時(shí)間: 2016-12-28

    上傳用戶:150501

  • 微機(jī)全自動(dòng)量熱儀 (G)煤礦化驗(yàn)室ZDHW-9000

    微機(jī)全自動(dòng)量熱儀 (G).rar煤礦化驗(yàn)室ZDHW-9000 先進(jìn)的電子制冷工藝,完全不受環(huán)境溫度變化的影響,確保儀器內(nèi)外筒溫差符合國(guó)標(biāo)要求。可連續(xù)長(zhǎng)時(shí)間工作。  不銹鋼真空內(nèi)筒。攪拌系統(tǒng)采用德國(guó)原裝進(jìn)口電機(jī)。測(cè)試速度快,測(cè)試周期≤8min(快速法) ≤15min(國(guó)標(biāo)GB/T213-2008)。熱容量穩(wěn)定性<0.2% 精密度<0.1% 溫度分辨率0.0001K . 采用WindowsXP操作系統(tǒng),實(shí)現(xiàn)一機(jī)多控,相互間測(cè)試互不影響,軟件運(yùn)行穩(wěn)定性高。數(shù)據(jù)處理功能豐富,用戶能方便查詢歷史試驗(yàn)數(shù)據(jù)、當(dāng)天數(shù)據(jù)、平行樣數(shù)據(jù)等。(可采用WindowsXP操作系統(tǒng),實(shí)現(xiàn)一機(jī)多控,相互間測(cè)試互不影響,軟件運(yùn)行穩(wěn)定性高。

    標(biāo)簽: ZDHW 9000 微機(jī) 全自動(dòng) 量熱

    上傳時(shí)間: 2019-10-20

    上傳用戶:zjiuzi

  • 嵌入式ARM系統(tǒng)原理與實(shí)例開發(fā)

    ·作  者: 楊宗德 編著出 版 社: 北京大學(xué)出版社出版時(shí)間: 2007-9-1 字  數(shù): 351000 版  次: 1 頁  數(shù): 233 印刷時(shí)間: 2007/09/01 紙  張: 膠版紙 I S B N : 9787301125304 包  裝: 平裝 內(nèi)容簡(jiǎn)介本書是一本介紹ARM處理器原理與底層程序開發(fā)實(shí)例的教材,涉及嵌入式系統(tǒng)結(jié)構(gòu)、嵌入式處理器及操作系統(tǒng)基本概念、ARM處理器原理及應(yīng)

    標(biāo)簽: ARM 嵌入式 系統(tǒng)原理

    上傳時(shí)間: 2013-06-19

    上傳用戶:410805624

  • Allegro軟件學(xué)習(xí)電子書

    Allegro 是一套功能強(qiáng)大,但相對(duì)的也\r\n是一套相當(dāng)復(fù)雜的系統(tǒng),它提供許多的專\r\n屬環(huán)境變量供使用者設(shè)定,讓使用者可以\r\n自訂一個(gè)專屬于自己的Allegro 操作環(huán)境,\r\n讓整個(gè)的Allegro 操作環(huán)境,可以隨心所欲\r\n地調(diào)整成為個(gè)人的最佳工作平臺(tái),接下來\r\n將分兩個(gè)章節(jié),為讀者介紹每個(gè)專屬環(huán)境\r\n變量的用法。

    標(biāo)簽: Allegro 軟件 電子書

    上傳時(shí)間: 2013-09-06

    上傳用戶:cherrytree6

  • 帶2K字節(jié)Flash的8位微控制器AT89LP216的主要功

    AT89LP216是一款低功耗、高性能CMOS8位單片機(jī),它有2k字節(jié)ISPFlash存儲(chǔ)器。產(chǎn)品生產(chǎn)采用Atmel的高密度非易失性存儲(chǔ)器技術(shù)而且和工業(yè)標(biāo)準(zhǔn)de的MCS51指令集相兼容。AT89LP216基于一個(gè)加強(qiáng)性CPU內(nèi)核,每時(shí)鐘周期讀取單子節(jié)指令。在經(jīng)典8051結(jié)構(gòu)中,每次讀取需要6個(gè)時(shí)鐘周期,使得執(zhí)行指令需要12、24或者48個(gè)時(shí)鐘周期。在AT89LP216CPU中,指令只需要1到4個(gè)時(shí)鐘周期就可以達(dá)到傳統(tǒng)8051速度的6到12倍。70%的指令字節(jié)數(shù)與執(zhí)行的時(shí)鐘周期數(shù)相等,而且其他指令只需要一個(gè)額外時(shí)鐘。在相同功耗下增強(qiáng)型CPU內(nèi)核可達(dá)到20MIPS,而傳統(tǒng)8051CPU只能達(dá)到4MIPS。相反地,在相同的工作速率下,新CPU內(nèi)核比傳統(tǒng)的8051擁有更低的時(shí)鐘速率和功耗。AT89LP216也擁有下列標(biāo)準(zhǔn)的特性:2K字節(jié)ISPFlash存儲(chǔ)器,128字節(jié)RAM、多達(dá)12個(gè)I/O口、2個(gè)16位定時(shí)器/計(jì)數(shù)器,兩PWM輸出,一個(gè)可編程看門狗定時(shí)器,一個(gè)全雙工串口,一個(gè)串行外圍接口,一個(gè)內(nèi)部RC振蕩器,片上石英振蕩器和一個(gè)4級(jí)、6矢量中斷系統(tǒng)。AT89LP216里的兩個(gè)定時(shí)器/計(jì)數(shù)器增加了兩個(gè)新模式。模式0可以被設(shè)置為9到16位的定時(shí)器/計(jì)數(shù)器,模式1可被設(shè)置位16位自動(dòng)裝載定時(shí)器/計(jì)數(shù)器。此外,定時(shí)器/計(jì)數(shù)器可以獨(dú)立驅(qū)動(dòng)PWM輸出。AT89LP216里面的I/O口能被獨(dú)立配置為4種工作模式的其中一種。在準(zhǔn)雙工模式中,I/O口的工作模式和傳統(tǒng)8051一樣。在輸入模式中,接口是三態(tài)門。推挽輸出模式提供足夠的CMOS驅(qū)動(dòng),開漏模式則起到一個(gè)下拉的作用。另外,Port1的所有8個(gè)引腳可以作為通用中斷接口。AT89LP216的I/O口能承受的電壓可超出電源電壓達(dá)到5.5V。當(dāng)器件的電源電壓為2.4V而I/O口輸入5.5V時(shí),所有I/O口的反向電流總和不超過100μA。

    標(biāo)簽: Flash 216 89 AT

    上傳時(shí)間: 2013-10-24

    上傳用戶:曹云鵬

  • 匯編+保護(hù)模式+教程

    九.輸入/輸出保護(hù)為了支持多任務(wù),80386不僅要有效地實(shí)現(xiàn)任務(wù)隔離,而且還要有效地控制各任務(wù)的輸入/輸出,避免輸入/輸出沖突。本文將介紹輸入輸出保護(hù)。 這里下載本文源代碼。 <一>輸入/輸出保護(hù)80386采用I/O特權(quán)級(jí)IPOL和I/O許可位圖的方法來控制輸入/輸出,實(shí)現(xiàn)輸入/輸出保護(hù)。 1.I/O敏感指令輸入輸出特權(quán)級(jí)(I/O Privilege Level)規(guī)定了可以執(zhí)行所有與I/O相關(guān)的指令和訪問I/O空間中所有地址的最外層特權(quán)級(jí)。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 VM RF 0 NT IOPL OF DF IF TF SF ZF 0 AF 0 PF 1 CF I/O許可位圖規(guī)定了I/O空間中的哪些地址可以由在任何特權(quán)級(jí)執(zhí)行的程序所訪問。I/O許可位圖在任務(wù)狀態(tài)段TSS中。 I/O敏感指令 指令 功能 保護(hù)方式下的執(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),并且只有在滿足所列條件時(shí)才可以執(zhí)行,所以把它們稱為I/O敏感指令。從表中可見,當(dāng)前特權(quán)級(jí)不在I/O特權(quán)級(jí)外層時(shí),可以正常執(zhí)行所列的全部I/O敏感指令;當(dāng)特權(quán)級(jí)在I/O特權(quán)級(jí)外層時(shí),執(zhí)行CLI和STI指令將引起通用保護(hù)異常,而其它四條指令是否能夠被執(zhí)行要根據(jù)訪問的I/O地址及I/O許可位圖情況而定(在下面論述),如果條件不滿足而執(zhí)行,那么將引起出錯(cuò)碼為0的通用保護(hù)異常。 由于每個(gè)任務(wù)使用各自的EFLAGS值和擁有自己的TSS,所以每個(gè)任務(wù)可以有不同的IOPL,并且可以定義不同的I/O許可位圖。注意,這些I/O敏感指令在實(shí)模式下總是可執(zhí)行的。 2.I/O許可位圖如果只用IOPL限制I/O指令的執(zhí)行是很不方便的,不能滿足實(shí)際要求需要。因?yàn)檫@樣做會(huì)使得在特權(quán)級(jí)3執(zhí)行的應(yīng)用程序要么可訪問所有I/O地址,要么不可訪問所有I/O地址。實(shí)際需要與此剛好相反,只允許任務(wù)甲的應(yīng)用程序訪問部分I/O地址,只允許任務(wù)乙的應(yīng)用程序訪問另一部分I/O地址,以避免任務(wù)甲和任務(wù)乙在訪問I/O地址時(shí)發(fā)生沖突,從而避免任務(wù)甲和任務(wù)乙使用使用獨(dú)享設(shè)備時(shí)發(fā)生沖突。 因此,在IOPL的基礎(chǔ)上又采用了I/O許可位圖。I/O許可位圖由二進(jìn)制位串組成。位串中的每一位依次對(duì)應(yīng)一個(gè)I/O地址,位串的第0位對(duì)應(yīng)I/O地址0,位串的第n位對(duì)應(yīng)I/O地址n。如果位串中的第位為0,那么對(duì)應(yīng)的I/O地址m可以由在任何特權(quán)級(jí)執(zhí)行的程序訪問;否則對(duì)應(yīng)的I/O地址m只能由在IOPL特權(quán)級(jí)或更內(nèi)層特權(quán)級(jí)執(zhí)行的程序訪問。如果在I/O外層特權(quán)級(jí)執(zhí)行的程序訪問位串中位值為1的位所對(duì)應(yīng)的I/O地址,那么將引起通用保護(hù)異常。 I/O地址空間按字節(jié)進(jìn)行編址。一條I/O指令最多可涉及四個(gè)I/O地址。在需要根據(jù)I/O位圖決定是否可訪問I/O地址的情況下,當(dāng)一條I/O指令涉及多個(gè)I/O地址時(shí),只有這多個(gè)I/O地址所對(duì)應(yīng)的I/O許可位圖中的位都為0時(shí),該I/O指令才能被正常執(zhí)行,如果對(duì)應(yīng)位中任一位為1,就會(huì)引起通用保護(hù)異常。 80386支持的I/O地址空間大小是64K,所以構(gòu)成I/O許可位圖的二進(jìn)制位串最大長(zhǎng)度是64K個(gè)位,即位圖的有效部分最大為8K字節(jié)。一個(gè)任務(wù)實(shí)際需要使用的I/O許可位圖大小通常要遠(yuǎn)小于這個(gè)數(shù)目。 當(dāng)前任務(wù)使用的I/O許可位圖存儲(chǔ)在當(dāng)前任務(wù)TSS中低端的64K字節(jié)內(nèi)。I/O許可位圖總以字節(jié)為單位存儲(chǔ),所以位串所含的位數(shù)總被認(rèn)為是8的倍數(shù)。從前文中所述的TSS格式可見,TSS內(nèi)偏移66H的字確定I/O許可位圖的開始偏移。由于I/O許可位圖最長(zhǎng)可達(dá)8K字節(jié),所以開始偏移應(yīng)小于56K,但必須大于等于104,因?yàn)門SS中前104字節(jié)為TSS的固定格式,用于保存任務(wù)的狀態(tài)。 1.I/O訪問許可檢查細(xì)節(jié)保護(hù)模式下處理器在執(zhí)行I/O指令時(shí)進(jìn)行許可檢查的細(xì)節(jié)如下所示。 (1)若CPL<=IOPL,則直接轉(zhuǎn)步驟(8);(2)取得I/O位圖開始偏移;(3)計(jì)算I/O地址對(duì)應(yīng)位所在字節(jié)在I/O許可位圖內(nèi)的偏移;(4)計(jì)算位偏移以形成屏蔽碼值,即計(jì)算I/O地址對(duì)應(yīng)位在字節(jié)中的第幾位;(5)把字節(jié)偏移加上位圖開始偏移,再加1,所得值與TSS界限比較,若越界,則產(chǎn)生出錯(cuò)碼為0的通用保護(hù)故障;(6)若不越界,則從位圖中讀對(duì)應(yīng)字節(jié)及下一個(gè)字節(jié);(7)把讀出的兩個(gè)字節(jié)與屏蔽碼進(jìn)行與運(yùn)算,若結(jié)果不為0表示檢查未通過,則產(chǎn)生出錯(cuò)碼為0的通用保護(hù)故障;(8)進(jìn)行I/O訪問。設(shè)某一任務(wù)的TSS段如下: TSSSEG                  SEGMENT PARA USE16                        TSS     <>             ;TSS低端固定格式部分                        DB      8 DUP(0)       ;對(duì)應(yīng)I/O端口00H—3FH                        DB      10000000B      ;對(duì)應(yīng)I/O端口40H—47H                        DB      01100000B      ;對(duì)用I/O端口48H—4FH                        DB      8182 DUP(0ffH) ;對(duì)應(yīng)I/O端口50H—0FFFFH                        DB      0FFH           ;位圖結(jié)束字節(jié)TSSLen                  =       $TSSSEG                  ENDS 再假設(shè)IOPL=1,CPL=3。那么如下I/O指令有些能正常執(zhí)行,有些會(huì)引起通用保護(hù)異常:                         in      al,21h  ;(1)正常執(zhí)行                        in      al,47h  ;(2)引起異常                        out     20h,al  ;(3)正常實(shí)行                        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許可檢查的細(xì)節(jié)可見,不論是否必要,當(dāng)進(jìn)行許可位檢查時(shí),80386總是從I/O許可位圖中讀取兩個(gè)字節(jié)。目的是為了盡快地執(zhí)行I/O許可檢查。一方面,常常要讀取I/O許可位圖的兩個(gè)字節(jié)。例如,上面的第(8)條指令要對(duì)I/O位圖中的兩個(gè)位進(jìn)行檢查,其低位是某個(gè)字節(jié)的最高位,高位是下一個(gè)字節(jié)的最低位。可見即使只要檢查兩個(gè)位,也可能需要讀取兩個(gè)字節(jié)。另一方面,最多檢查四個(gè)連續(xù)的位,即最多也只需讀取兩個(gè)字節(jié)。所以每次要讀取兩個(gè)字節(jié)。這也是在判別是否越界時(shí)再加1的原因。為此,為了避免在讀取I/O許可位圖的最高字節(jié)時(shí)產(chǎn)生越界,必須在I/O許可位圖的最后填加一個(gè)全1的字節(jié),即0FFH。此全1的字節(jié)應(yīng)填加在最后一個(gè)位圖字節(jié)之后,TSS界限范圍之前,即讓填加的全1字節(jié)在TSS界限之內(nèi)。 I/O許可位圖開始偏移加8K所得的值與TSS界限值二者中較小的值決定I/O許可位圖的末端。當(dāng)TSS的界限大于I/O許可位圖開始偏移加8K時(shí),I/O許可位圖的有效部分就有8K字節(jié),I/O許可檢查全部根據(jù)全部根據(jù)該位圖進(jìn)行。當(dāng)TSS的界限不大于I/O許可位圖開始偏移加8K時(shí),I/O許可位圖有效部分就不到8K字節(jié),于是對(duì)較小I/O地址訪問的許可檢查根據(jù)位圖進(jìn)行,而對(duì)較大I/O地址訪問的許可檢查總被認(rèn)為不可訪問而引起通用保護(hù)故障。因?yàn)檫@時(shí)會(huì)發(fā)生字節(jié)越界而引起通用保護(hù)異常,所以在這種情況下,可認(rèn)為不足的I/O許可位圖的高端部分全為1。利用這個(gè)特點(diǎn),可大大節(jié)約TSS中I/O許可位圖占用的存儲(chǔ)單元,也就大大減小了TSS段的長(zhǎng)度。 <二>重要標(biāo)志保護(hù)輸入輸出的保護(hù)與存儲(chǔ)在標(biāo)志寄存器EFLAGS中的IOPL密切相關(guān),顯然不能允許隨便地改變IOPL,否則就不能有效地實(shí)現(xiàn)輸入輸出保護(hù)。類似地,對(duì)EFLAGS中的IF位也必須加以保護(hù),否則CLI和STI作為敏感指令對(duì)待是無意義的。此外,EFLAGS中的VM位決定著處理器是否按虛擬8086方式工作。 80386對(duì)EFLAGS中的這三個(gè)字段的處理比較特殊,只有在較高特權(quán)級(jí)執(zhí)行的程序才能執(zhí)行IRET、POPF、CLI和STI等指令改變它們。下表列出了不同特權(quán)級(jí)下對(duì)這三個(gè)字段的處理情況。 不同特權(quán)級(jí)對(duì)標(biāo)志寄存器特殊字段的處理 特權(quán)級(jí) VM標(biāo)志字段 IOPL標(biāo)志字段 IF標(biāo)志字段 CPL=0 可變(初POPF指令外) 可變 可變 0  不變 不變 可變 CPL>IOPL 不變 不變 不變 從表中可見,只有在特權(quán)級(jí)0執(zhí)行的程序才可以修改IOPL位及VM位;只能由相對(duì)于IOPL同級(jí)或更內(nèi)層特權(quán)級(jí)執(zhí)行的程序才可以修改IF位。與CLI和STI指令不同,在特權(quán)級(jí)不滿足上述條件的情況下,當(dāng)執(zhí)行POPF指令和IRET指令時(shí),如果試圖修改這些字段中的任何一個(gè)字段,并不引起異常,但試圖要修改的字段也未被修改,也不給出任何特別的信息。此外,指令POPF總不能改變VM位,而PUSHF指令所壓入的標(biāo)志中的VM位總為0。 <三>演示輸入輸出保護(hù)的實(shí)例(實(shí)例九)下面給出一個(gè)用于演示輸入輸出保護(hù)的實(shí)例。演示內(nèi)容包括:I/O許可位圖的作用、I/O敏感指令引起的異常和特權(quán)指令引起的異常;使用段間調(diào)用指令CALL通過任務(wù)門調(diào)用任務(wù),實(shí)現(xiàn)任務(wù)嵌套。 1.演示步驟實(shí)例演示的內(nèi)容比較豐富,具體演示步驟如下:(1)在實(shí)模式下做必要準(zhǔn)備后,切換到保護(hù)模式;(2)進(jìn)入保護(hù)模式的臨時(shí)代碼段后,把演示任務(wù)的TSS段描述符裝入TR,并設(shè)置演示任務(wù)的堆棧;(3)進(jìn)入演示代碼段,演示代碼段的特權(quán)級(jí)是0;(4)通過任務(wù)門調(diào)用測(cè)試任務(wù)1。測(cè)試任務(wù)1能夠順利進(jìn)行;(5)通過任務(wù)門調(diào)用測(cè)試任務(wù)2。測(cè)試任務(wù)2演示由于違反I/O許可位圖規(guī)定而導(dǎo)致通用保護(hù)異常;(6)通過任務(wù)門調(diào)用測(cè)試任務(wù)3。測(cè)試任務(wù)3演示I/O敏感指令如何引起通用保護(hù)異常;(7)通過任務(wù)門調(diào)用測(cè)試任務(wù)4。測(cè)試任務(wù)4演示特權(quán)指令如何引起通用保護(hù)異常;(8)從演示代碼轉(zhuǎn)臨時(shí)代碼,準(zhǔn)備返回實(shí)模式;(9)返回實(shí)模式,并作結(jié)束處理。

    標(biāo)簽: 匯編 保護(hù)模式 教程

    上傳時(shí)間: 2013-12-11

    上傳用戶:nunnzhy

  • RFID不確定數(shù)據(jù)流中的Top-K查詢研究

    在游客游跡跟蹤與追溯系統(tǒng)中,產(chǎn)生大量不確定數(shù)據(jù),有效的Top-K查詢處理是不確定性數(shù)據(jù)管理中一項(xiàng)重要技術(shù)。研究了運(yùn)用Top-K檢索不確定數(shù)據(jù)的問題,定義了不確定數(shù)據(jù)流元組的查詢語義,提出了一種在記錄向量的基礎(chǔ)上的不確定數(shù)據(jù)查詢算法,并利用實(shí)例演示了查詢的過程。該算法按照元組的得分值進(jìn)行降序排列,概率值最高的前k個(gè)元組集合就是Top-K的查詢結(jié)果,實(shí)驗(yàn)結(jié)果表明,本文的算法更具高效性和實(shí)用性。

    標(biāo)簽: Top-K RFID 數(shù)據(jù)流 查詢

    上傳時(shí)間: 2013-10-27

    上傳用戶:l銀幕海

主站蜘蛛池模板: 兖州市| 全州县| 台南县| 迁西县| 郎溪县| 屏东市| 湖北省| 陇川县| 铜梁县| 满洲里市| 三原县| 余庆县| 凤山市| 屯留县| 通州市| 宣威市| 湛江市| 台前县| 云阳县| 西峡县| 额尔古纳市| 永清县| 辽中县| 德格县| 上饶县| 如东县| 东乡族自治县| 沐川县| 鸡西市| 斗六市| 买车| 姚安县| 遵义县| 明光市| 金昌市| 淮北市| 枣强县| 宝鸡市| 潞西市| 卢氏县| 巧家县|