999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

在Turbo C中巧用系統的硬件資源

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

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

關鍵詞:Turbo C;BIOS;DOS;調用

一、引言

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

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

二、調用BIOS功能

在Turbo C中提供int86()函數來調用BIOS系統函數的,int86()函數的原型說明為:

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

參數說明:

1.intnumber是中斷調用號,下面列出BIOS系統調用的中斷調用號及其所調用的功能如表1所示。

在進行BIOS調用時,必須指出中斷調用號。

2.in_regs是一個聯合型REGS變量,聯合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用來存放指定中斷調用所需要的參數信息。這些參數被放在AL、BX、CX和DX寄存器中,并通過AH寄存器中的值來確定調用的功能。例如,中斷10H完成的是對顯示器I/O操作。根據存放在AH寄存器中的值可以進一步確定完成的是哪一種顯示器I/O操作功能。顯示器I/O操作有17種功能[3],如表2所示。

其中的每一個功能調用,還需要在指定的寄存器中放入相應的參數。

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

3.out_regs也是聯合型REGS變量,用來存放中斷調用返回后當前寄存器的值。

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

實例:利用BIOS中斷10H和功能調用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);}

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

三、調用DOS功能

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

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

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

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

實例:使用DOS功能調用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()函數中使用sprintf()函數將所讀取的日期按月日年的格式合并為一個字符串存入字符串date[]中。

(表3)

四、結束語

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

參考文獻

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

[2] 張引. C程序設計基礎課程設計[M],杭州:浙江大學出版社,2007.

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

主站蜘蛛池模板: 无码中字出轨中文人妻中文中| 中文字幕 欧美日韩| 丰满人妻中出白浆| 日韩国产黄色网站| 亚洲,国产,日韩,综合一区| 无码av免费不卡在线观看| 中文毛片无遮挡播放免费| 成人午夜久久| 日韩免费视频播播| 91福利一区二区三区| 亚洲第一成年网| 91网站国产| 高清久久精品亚洲日韩Av| 国产成人在线无码免费视频| 伊伊人成亚洲综合人网7777| 久久永久精品免费视频| 久久国产黑丝袜视频| 日韩小视频在线播放| 国产系列在线| 99人妻碰碰碰久久久久禁片| 国产91久久久久久| 欧美日韩在线亚洲国产人| 在线观看国产黄色| 亚洲成人精品在线| 在线视频97| 999福利激情视频| 成人免费一区二区三区| 久久精品国产精品青草app| 91精品国产综合久久不国产大片| 国产在线97| 91在线激情在线观看| 免费高清a毛片| 99青青青精品视频在线| 欧美日韩久久综合| 91视频99| 国产精品手机在线观看你懂的 | 乱系列中文字幕在线视频| 欧洲亚洲一区| 2019年国产精品自拍不卡| 欧美日韩激情| 中文字幕人妻无码系列第三区| 亚洲欧美日韩成人高清在线一区| 九色视频线上播放| 日韩在线1| 91成人在线免费视频| 国产18在线播放| 亚洲不卡影院| 国产成人综合亚洲欧美在| 亚洲国产精品日韩av专区| 高清免费毛片| 一区二区三区国产| 成人福利在线视频免费观看| 欧美区一区| 在线免费亚洲无码视频| 亚洲天堂视频网站| 亚洲一级毛片免费看| v天堂中文在线| 99九九成人免费视频精品| 亚洲男人天堂2020| 久久国产精品77777| 亚洲一级毛片| 手机精品视频在线观看免费| 538精品在线观看| 九九九精品成人免费视频7| 日本人妻丰满熟妇区| 亚洲成a人片在线观看88| 中文字幕乱妇无码AV在线| 黄色一及毛片| 亚洲一区二区三区香蕉| 伊人久综合| 欧美亚洲国产一区| 中文字幕日韩欧美| 天堂岛国av无码免费无禁网站 | 精品国产自在在线在线观看| 中美日韩在线网免费毛片视频| 鲁鲁鲁爽爽爽在线视频观看 | 好吊妞欧美视频免费| 一本大道香蕉久中文在线播放| 亚洲AV人人澡人人双人| 激情无码视频在线看| 日韩免费毛片视频| 久久国产毛片|