亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        在Turbo C中巧用系統(tǒng)的硬件資源

        2011-12-31 00:00:00王超
        軟件工程 2011年9期

        摘要:本文介紹了利用Turbo C編譯系統(tǒng)中提供的系統(tǒng)標準函數(shù)int86()和intdos()采用中斷方式對BIOS和DOS實現(xiàn)調(diào)用,以便充分利用系統(tǒng)的硬件資源,提高程序的運行效率。

        關(guān)鍵詞:Turbo C;BIOS;DOS;調(diào)用

        一、引言

        在以intel 80X86芯片為CPU的微型計算機中,對鍵盤、顯示器、磁盤驅(qū)動器等低級操作是由固化在只讀存儲器ROM中的BIOS程序來完成,而MS-DOS是使用在微型機上的一個磁盤操作系統(tǒng)。它提供了高一層的與機器硬件打交道的接口,同時還具有文件管理、存儲管理等功能。因此,充分利用ROM-BIOS和DOS中的函數(shù)[1],不僅可以有效地利用系統(tǒng)資源,而且能夠大大提高程序的開發(fā)效率和質(zhì)量,以及完成復(fù)雜的程序功能。

        Turbo C編譯系統(tǒng)[2]中提供的系統(tǒng)標準函數(shù)int86()和intdos()采用中斷方式對BIOS和DOS實現(xiàn)調(diào)用。充分利用系統(tǒng)的硬件資源,提高程序的運行效率。

        二、調(diào)用BIOS功能

        在Turbo C中提供int86()函數(shù)來調(diào)用BIOS系統(tǒng)函數(shù)的,int86()函數(shù)的原型說明為:

        int int86(int intnumber, union REGS *in_regs, union REGS out_regs);

        參數(shù)說明:

        1.intnumber是中斷調(diào)用號,下面列出BIOS系統(tǒng)調(diào)用的中斷調(diào)用號及其所調(diào)用的功能如表1所示。

        在進行BIOS調(diào)用時,必須指出中斷調(diào)用號。

        2.in_regs是一個聯(lián)合型REGS變量,聯(lián)合REGS在dos.h中定義如下:

        struct WORDREGS

        {

        unsigned int ax,bx,cx,dx,si,di,cflag;

        };

        struct BYTEREGS

        {

        unsigned char al,ah,bl,bh,cl,ch,dl,dh;

        };

        union REGS

        {struct WORDREGS x;

        struct BYTEREGS h;

        };

        (表1)

        in_rges用來存放指定中斷調(diào)用所需要的參數(shù)信息。這些參數(shù)被放在AL、BX、CX和DX寄存器中,并通過AH寄存器中的值來確定調(diào)用的功能。例如,中斷10H完成的是對顯示器I/O操作。根據(jù)存放在AH寄存器中的值可以進一步確定完成的是哪一種顯示器I/O操作功能。顯示器I/O操作有17種功能[3],如表2所示。

        其中的每一個功能調(diào)用,還需要在指定的寄存器中放入相應(yīng)的參數(shù)。

        如功能調(diào)用02H,需要在DH和DL寄存器中存放光標定位的坐標值,DH中存放行坐標,DL中存放列坐標。BH寄存器中存放光標的顯示頁數(shù)。

        3.out_regs也是聯(lián)合型REGS變量,用來存放中斷調(diào)用返回后當前寄存器的值。

        int86()函數(shù)在中斷完成后返回AX寄存器的值。若位標志被置位,即(out_regs->x.cflag!=0),則表示出錯。

        實例:利用BIOS中斷10H和功能調(diào)用06H來完成清屏幕的操作。

        #include

        #include

        #include

        main()

        {char attr=7;

        int row,col;

        for(row=0;row<24;row++)

        {for(col=0;col<79;col++)

        putchar('\');}

        getch();}

        clear_screen(char attr)

        {unionREGS regs;

        regs.h.ah=6;

        regs.h.al=0;

        regs.h.ch=0;

        regs.h.cl=0;

        regs.h.dh=24;

        regs.h.dl=79;

        regs.h.bh=attr;

        int86(0x10,regs,regs);}

        說明:函數(shù)clear_screen()為清屏函數(shù)。寄存器CH、CL和DH、DL中分別存放的是整個屏幕的左上角坐標和右下角坐標。AH寄存器中存放的是功能調(diào)用號06H,若將06H功能用于清屏,則AL寄存器中必須存放零,否則AL中存放滾動的文本行數(shù)。BH寄存器中存放的是清除屏幕的屬性,當bh=7時,屏幕清除后為黑色。

        三、調(diào)用DOS功能

        DOS功能調(diào)用是通過系統(tǒng)中斷調(diào)用21H來完成的。在Turbo C系統(tǒng)中提供了intdos()函數(shù)來完成DOS功能調(diào)用。MS-DOS中系統(tǒng)中斷21H的功能號從00H到62H,包含了約上百種不同的功能。表3列出了其中的部分功能。

        Turbo C中使用intdos()函數(shù)來完成DOS功能調(diào)用。intdos()函數(shù)的原型說明為:

        int intdos(union REGS *in_regs,union REGS *out_regs);

        intdos()的函數(shù)的調(diào)用方法與int86()函數(shù)基本相同,只不過是不用填入中斷號。intdos()函數(shù)就是調(diào)用中斷21H。同樣intdos()函數(shù)被調(diào)用時必須將功能調(diào)用號放入AH寄存器中,若所調(diào)用的功能還需要其它參數(shù),則將這些參數(shù)放入所要求的寄存器中。

        實例:使用DOS功能調(diào)用2AH按月-日-年的形式返回日期。CX寄存器中存放年份,DH寄存器中存放月份,DL寄存器中存放日期。

        #include

        #include

        #include

        char *read_date();

        main()

        {char *pdate;

        pdate=read_date();

        printf(\"%s\\",pdate);}

        char *read_date()

        {char *month[12]={\"Anuary\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",

        \"August\",\"September\",\"October\",\"November\",\"December\"};

        char date[20];

        union REGS regs;

        regs.h.ah=0x2A;

        intdos(regs,regs);

        sprintf(date,\"%s %d %d\\",month[regs.h.dh-1],regs.h.dl,regs.x.cx);

        return(date);}

        說明:在read_date()函數(shù)中使用sprintf()函數(shù)將所讀取的日期按月日年的格式合并為一個字符串存入字符串date[]中。

        (表3)

        四、結(jié)束語

        通過上面的實例,讀者對如何在Turbo C下使用int86()函數(shù)來調(diào)用BIOS系統(tǒng)功能有一個大概的了解,雖然BIOS功能調(diào)用能簡練程序代碼,提高程序運行效率和功能。但有一點也必須注意,即BIOS是一組低級軟件程序,它駐留在系統(tǒng)板上的只讀存儲器(ROM)中。BIOS程序本身直接與外部設(shè)備進行通訊,并為編程人員提供了一個簡單的接口。在計算機硬件不同的情況下,為了保持軟件的兼容性,而必須對BIOS程序做相應(yīng)的改動。因此,一個有調(diào)用BIOS語句的程序在兼容機上有可能不能運行,這就是說對移植性要求較高的程序,盡可能不要使用BIOS程序調(diào)用。

        參考文獻

        [1] 顏暉.C語言程序設(shè)計實驗指導(dǎo)[M],北京:高等教育出版社,2008.

        [2] 張引. C程序設(shè)計基礎(chǔ)課程設(shè)計[M],杭州:浙江大學(xué)出版社,2007.

        [3] 譚浩強. C程序設(shè)計[M],北京:清華大學(xué)出版社,2004.

        欧美老妇与zozoz0交| 国产精品一区二区三区在线免费 | a级毛片免费完整视频 | 精品久久杨幂国产杨幂| 人妻乱交手机在线播放| 老熟妇乱子伦牲交视频| 亚洲日韩av无码中文字幕美国| 91免费播放日韩一区二天天综合福利电影| 国产亚洲av手机在线观看| 日韩一区二区三区久久精品| 在线观看视频播放| 荡女精品导航| 国产人妖赵恩静在线视频| 白浆国产精品一区二区| 蜜桃视频无码区在线观看 | 精品国产看高清国产毛片| 亚洲成av人片在线天堂无| 日本中文字幕婷婷在线| 久久无码专区国产精品s| 最新精品国偷自产在线婷婷| 亚洲三区av在线播放| 国产精品久久久久久久久久红粉| 亚洲精品无码成人a片| 中文字幕亚洲好看有码| 久久av一区二区三区黑人| 亚洲av综合av国产av中文| 一个人看的www免费视频中文| av网站影片在线观看| 久久天堂精品一区二区三区四区| 高清破外女出血av毛片| 亚洲国产精品500在线观看| 老岳肥屁熟女四五十路| 97se亚洲国产综合自在线观看| 毛片免费全部无码播放| 一区二区三区在线蜜桃| 凌辱人妻中文字幕一区| 亚洲日韩中文字幕一区| 国产精品国产自线拍免费| 人妻精品人妻一区二区三区四区| 岳好紧好湿夹太紧了好爽矜持 | 中文字幕av永久免费在线|