




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第第1212章章 C C語言綜合應(yīng)用程序示例語言綜合應(yīng)用程序示例北京郵電大學(xué)出版社北京郵電大學(xué)出版社內(nèi)容提要內(nèi)容提要C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁 一個有實用價值的一個有實用價值的C語言應(yīng)用程序往往較大,需要劃語言應(yīng)用程序往往較大,需要劃分成不同的模塊,分配給不同的程序員去完成。因此,在分成不同的模塊,分配給不同的程序員去完成。因此,在實用軟件的開發(fā)中,往往需要采用多模塊編程技術(shù)。實用軟件的開發(fā)中,往往需要采用多模塊編程技術(shù)。12.1 12.1 多模塊編程方法多模塊編程方法 使用多
2、模塊編程技術(shù)的處理過程大致如下:使用多模塊編程技術(shù)的處理過程大致如下: 1 1、首先首先將一個大的源程序根據(jù)其功能合理地劃分將一個大的源程序根據(jù)其功能合理地劃分成若干個小的源程序,每個小源程序均以程序文件成若干個小的源程序,每個小源程序均以程序文件(.C)(.C)的形式保存在磁盤上。的形式保存在磁盤上。并并建立一個包括各個源程序模建立一個包括各個源程序模塊的文件名的工程文件塊的文件名的工程文件(.prj)(.prj)。 2 2、然后然后用編譯器進(jìn)行編譯,將工程文件中指定的用編譯器進(jìn)行編譯,將工程文件中指定的多個源程序文件進(jìn)行編譯,生成多個目標(biāo)文件和一個多個源程序文件進(jìn)行編譯,生成多個目標(biāo)文件和
3、一個可執(zhí)行文件。注意,在分模塊單獨編譯處理的各個程可執(zhí)行文件。注意,在分模塊單獨編譯處理的各個程序模塊中,必須有且只有一個主函數(shù)序模塊中,必須有且只有一個主函數(shù) main( ) 。 一、程序模塊組織C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁1 1、使用外部變量使用外部變量 即一個程序文件即一個程序文件file1.c中定義一個外部變量,另一中定義一個外部變量,另一個程序文件個程序文件file2.c中的函數(shù)可以通過外部變量說明后來中的函數(shù)可以通過外部變量說明后來使用這個變量,以實現(xiàn)模塊間的通信。使
4、用這個變量,以實現(xiàn)模塊間的通信。 說明形式:說明形式:extern 類型說明符類型說明符 外部變量名外部變量名 ; 注意:只是進(jìn)行了說明,并不是變量定義。注意:只是進(jìn)行了說明,并不是變量定義。2、舉例舉例 利用外部變量實現(xiàn)程序模塊利用外部變量實現(xiàn)程序模塊f1.c與程序模塊與程序模塊f2.c之之間的通信。間的通信。 二、模塊之間的通信設(shè)程序模塊文件設(shè)程序模塊文件 f1.c 的內(nèi)容如下:的內(nèi)容如下: #include int var=8; /* 全局變量的定義全局變量的定義 */C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計
5、上一頁上一頁下一頁下一頁 main() printf(“%d”,var); proc1(); printf(“%dn”,var); 程序模塊文件程序模塊文件f2.c 的內(nèi)容如下:的內(nèi)容如下:extern int var; /* 外部變量的說明外部變量的說明 */proc1() var = 25 ;程序編譯連接生成可執(zhí)行文件,執(zhí)行結(jié)果為:程序編譯連接生成可執(zhí)行文件,執(zhí)行結(jié)果為: 8 25C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁 1、#include命令經(jīng)過預(yù)處理后,會將其后有關(guān)文件命令經(jīng)過預(yù)處
6、理后,會將其后有關(guān)文件的內(nèi)容拷貝到命令所在的源程序文件中。的內(nèi)容拷貝到命令所在的源程序文件中。 2、在上一個例子中,程序要能夠編譯運行,需在上一個例子中,程序要能夠編譯運行,需建建立一個工程文件立一個工程文件f12.prj,其內(nèi)容為:,其內(nèi)容為: f1.c f2.c然后對然后對f12.prj文件編譯運行即可。文件編譯運行即可。 3、也可以在、也可以在f1.c文件開頭文件開頭加一預(yù)處理命令加一預(yù)處理命令:三、預(yù)處理命令預(yù)處理命令#include的應(yīng)用#include#includeint var=8; main() 對對f1.c文件直接編譯運行即可。文件直接編譯運行即可。C C語言程序設(shè)計語言程
7、序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁12.2 12.2 圖形處理應(yīng)用圖形處理應(yīng)用 圖形處理是計算機(jī)應(yīng)用的一個極具特色的領(lǐng)域,有圖形處理是計算機(jī)應(yīng)用的一個極具特色的領(lǐng)域,有很好的應(yīng)用前景,可以很好的應(yīng)用前景,可以增強(qiáng)程序的趣味性、實用性。增強(qiáng)程序的趣味性、實用性。一、基本圖形處理庫函數(shù) Turbo C支持多種顯示適配器的各種顯示模式,提支持多種顯示適配器的各種顯示模式,提供了畫點、線、圓、橢圓、多邊形以及輸出各種字體供了畫點、線、圓、橢圓、多邊形以及輸出各種字體等功能的函數(shù)。等功能的函數(shù)。這些函數(shù)包含在圖形頭文件
8、(這些函數(shù)包含在圖形頭文件(graphics.h)中,在進(jìn))中,在進(jìn)行目標(biāo)程序連接時,也必須將圖形庫文件行目標(biāo)程序連接時,也必須將圖形庫文件graphics.lib連接到目標(biāo)程序中去,其圖形接口還包括圖形顯示驅(qū)連接到目標(biāo)程序中去,其圖形接口還包括圖形顯示驅(qū)動程序(動程序(*.BGI)等。)等。C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁作用:將一個圖形驅(qū)動程序裝入內(nèi)存,并將系統(tǒng)設(shè)置成作用:將一個圖形驅(qū)動程序裝入內(nèi)存,并將系統(tǒng)設(shè)置成 圖形模式;圖形模式;說明:說明:gd指定指定所用的圖形驅(qū)動程序,
9、其值可參照書上所用的圖形驅(qū)動程序,其值可參照書上 的圖形驅(qū)動程序常量表;的圖形驅(qū)動程序常量表; gm說明初始化的圖形模式,其取值見附錄說明初始化的圖形模式,其取值見附錄; path指定驅(qū)動程序目錄路徑,空字符時表示驅(qū)動指定驅(qū)動程序目錄路徑,空字符時表示驅(qū)動 程序就在當(dāng)前目錄下。程序就在當(dāng)前目錄下。 例如:若已知所用的圖形適配器為例如:若已知所用的圖形適配器為CGA,并打算使用,并打算使用 640200高分辨率模式高分辨率模式CGAHI,則圖形初始化,則圖形初始化 部分可寫成:部分可寫成:1 1、圖形系統(tǒng)初始化函數(shù)圖形系統(tǒng)初始化函數(shù) 顯示模式控制函數(shù)顯示模式控制函數(shù)initgraph(gd,gm
10、,path)int gd = CGA, gm = CGAHI;initgraph(&gd, &gm, “TC” ); C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁 自動檢測顯示器硬件的函數(shù)自動檢測顯示器硬件的函數(shù)detectgraph(gd,gm) 作用:當(dāng)編程者不知所用的圖形適配器的類型,作用:當(dāng)編程者不知所用的圖形適配器的類型, 或者需要編寫在不同圖形模式下均能運行或者需要編寫在不同圖形模式下均能運行 的圖形程序,使用該函數(shù)可以完成對適配的圖形程序,使用該函數(shù)可以完成對適配
11、器的檢查,獲取顯示器類型號(賦給器的檢查,獲取顯示器類型號(賦給gd) 及相應(yīng)的顯示模式(賦給及相應(yīng)的顯示模式(賦給gm)。)。 例如:圖形初始化部分可以寫成:例如:圖形初始化部分可以寫成: int gd, gm; detectgraph(&gd,&dm); /*自動測試硬件自動測試硬件 */ initgraph(&gd, &gm, “TC” ); /* 根據(jù)測試結(jié)果進(jìn)行圖形初始化根據(jù)測試結(jié)果進(jìn)行圖形初始化 */C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁 恢復(fù)顯
12、示方式函數(shù)恢復(fù)顯示方式函數(shù)closegraph( ) 作用:作用:關(guān)閉圖形系統(tǒng),返回文本工作方式。關(guān)閉圖形系統(tǒng),返回文本工作方式。 恢復(fù)工作模式函數(shù)恢復(fù)工作模式函數(shù)restorecrtmode( ) 設(shè)置圖形工作模式函數(shù)設(shè)置圖形工作模式函數(shù)setgraphmode( ) 作用:作用:使顯示器工作方式在圖形和文本方式使顯示器工作方式在圖形和文本方式 之間來回切換。之間來回切換。 清屏函數(shù)清屏函數(shù)cleardevice( ) 作用:用于作用:用于畫圖前進(jìn)行清除屏幕畫圖前進(jìn)行清除屏幕; 作用范圍為整個屏幕。作用范圍為整個屏幕。 C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程
13、序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁2 2、基本圖形函數(shù)基本圖形函數(shù) 三種最基本的圖形函數(shù):畫點、線、圓函數(shù)三種最基本的圖形函數(shù):畫點、線、圓函數(shù) 畫點函數(shù)畫點函數(shù) putpixel(x, y, color); 作用:將在坐標(biāo)作用:將在坐標(biāo)x、y指定的位置上畫一點,指定的位置上畫一點, 該點的顏色由該點的顏色由color值決定。值決定。 畫線函數(shù)畫線函數(shù) line(startx, starty, endx, endy); 作用:在作用:在(startx, starty)和和(endx, endy)兩點兩點 間畫一直線,顏色為系統(tǒng)當(dāng)前顏色。間畫一直線,顏色為系
14、統(tǒng)當(dāng)前顏色。 畫圓函數(shù)畫圓函數(shù) circle(x, y, radius); 作用:用當(dāng)前顏色畫一個圓心在作用:用當(dāng)前顏色畫一個圓心在(x,y)處,半處,半 徑大小為徑大小為radius的圓的圓。 C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁 畫圓弧、扇形、橢圓函數(shù)畫圓弧、扇形、橢圓函數(shù) 畫圓弧函數(shù)畫圓弧函數(shù) arc(x, y,start, end, radius); 作用:用當(dāng)前顏色,以作用:用當(dāng)前顏色,以(x,y)為圓心,為圓心,(start,end)為起為起 止角,止角,radius為半徑畫
15、圓弧。為半徑畫圓弧。 畫扇形函數(shù)畫扇形函數(shù) pieslice(x, y, start, end, radius); 作用:用當(dāng)前顏色,以作用:用當(dāng)前顏色,以(x,y)為圓心,為圓心, (start,end)為起為起 止角,止角,radius為半徑畫扇形為半徑畫扇形。 畫橢圓函數(shù)畫橢圓函數(shù) ellipse(x,y,start,end,xradius, yradius); 作用:用當(dāng)前畫線顏色,以作用:用當(dāng)前畫線顏色,以(x,y)為中心,為中心, (start,end) 為起止角,為起止角,(xradius,yradius)為兩軸半徑畫為兩軸半徑畫 橢圓。橢圓。說明:說明:start、end均以角
16、度為單位。均以角度為單位。C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁 畫多邊形、矩形和條形圖函數(shù)畫多邊形、矩形和條形圖函數(shù) 畫多邊形函數(shù)畫多邊形函數(shù)drawpoly(numpoints,points); 作用:用當(dāng)前顏色畫一個多邊形,多邊形的頂點數(shù)作用:用當(dāng)前顏色畫一個多邊形,多邊形的頂點數(shù) 為為numpoints,而,而points指向的整形數(shù)組連續(xù)指向的整形數(shù)組連續(xù) 存放著各頂點的存放著各頂點的(x,y)坐標(biāo)。坐標(biāo)。 畫畫矩形矩形函數(shù)函數(shù)rectangle(left,top,right,b
17、ottom); 作用:用當(dāng)前顏色,以作用:用當(dāng)前顏色,以(left,top)為左上角坐標(biāo),以為左上角坐標(biāo),以 (right,bottom)為右下角坐標(biāo)畫一個矩形。為右下角坐標(biāo)畫一個矩形。 畫畫條形圖條形圖函數(shù)函數(shù)bar(left,top,right,bottom); bar3d(left,top,right,bottom,depth,topflag); 作用:用當(dāng)前顏色,畫一實心條形圖;作用:用當(dāng)前顏色,畫一實心條形圖; depth決定決定bar3d()產(chǎn)生的三維條形圖的厚度,產(chǎn)生的三維條形圖的厚度, topflag決定是否加頂蓋。決定是否加頂蓋。C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)
18、計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁3 3、顏色控制函數(shù)顏色控制函數(shù) 屏幕上顯示出的點、線、面的顏色稱為前景色,屏幕上顯示出的點、線、面的顏色稱為前景色,而襯托它們的背景顏色稱為背景色。而襯托它們的背景顏色稱為背景色。在在Turbo C中常中常使用的使用的16個標(biāo)準(zhǔn)色為:個標(biāo)準(zhǔn)色為:C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁 顏色設(shè)置顏色設(shè)置函數(shù)函數(shù)setcolor(color); 作用:作用:用顏色值用顏色值color設(shè)置當(dāng)前畫圖
19、顏色設(shè)置當(dāng)前畫圖顏色。 圖形填充圖形填充函數(shù)函數(shù)floodfill(x, y, bordercolor); 作用:該函數(shù)對任意封閉圖形進(jìn)行填充,其顏色和作用:該函數(shù)對任意封閉圖形進(jìn)行填充,其顏色和 模式由設(shè)定的或缺省的顏色與圖形模式?jīng)Q定。模式由設(shè)定的或缺省的顏色與圖形模式?jīng)Q定。 說明:編程時該函數(shù)位于畫圖函數(shù)之后;參數(shù)說明:編程時該函數(shù)位于畫圖函數(shù)之后;參數(shù)(x,y) 為封閉圖形中的任意一點,為封閉圖形中的任意一點,bordercolor是封是封 閉圖形的邊框顏色。閉圖形的邊框顏色。 填充模式填充模式函數(shù)函數(shù)setfillstyle(pattern, color); 作用:作用:來設(shè)定來設(shè)定f
20、loodfill( )函數(shù)函數(shù)的填充模式的填充模式 。 說明:說明:參數(shù)參數(shù)pattern的值及其符號如下表所示。的值及其符號如下表所示。 C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁舉例:舉例:利用基本作圖函數(shù)及顏色控制函數(shù)畫圖。利用基本作圖函數(shù)及顏色控制函數(shù)畫圖。#include#include#includevoid box(int, int, int, int);C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁
21、上一頁下一頁下一頁main( ) int gd=DETECT, gm, i; /*將圖形模式設(shè)置成缺省模式將圖形模式設(shè)置成缺省模式 */ initgraph(&gd, &gm, “tc”); /* 根據(jù)測試結(jié)果進(jìn)行圖形初始化根據(jù)測試結(jié)果進(jìn)行圖形初始化 */ cleardevice(); /* 清屏幕清屏幕 */ setcolor(1); /* 設(shè)置當(dāng)前畫圖顏色為藍(lán)色設(shè)置當(dāng)前畫圖顏色為藍(lán)色 */ line(0,0,639,349); /* 畫一條直線畫一條直線 */ box(100,100,300,200,1); /* 調(diào)調(diào)box函數(shù)畫一個框函數(shù)畫一個框 */ floodfill
22、(110,110,1); /* 填充顏色填充顏色 */ setcolor(2); /* 設(shè)置當(dāng)前畫圖顏色為綠色設(shè)置當(dāng)前畫圖顏色為綠色 */ line(50,200,400,125); /* 畫一條直線畫一條直線 */ circle(320,175,100); /* 畫一個圓畫一個圓 */C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁 setcolor(BLUE); /* 設(shè)置當(dāng)前畫圖顏色為藍(lán)色設(shè)置當(dāng)前畫圖顏色為藍(lán)色 */ circle(100,100,200); /* 再畫一個圓再畫一個圓 */
23、setfillstyle(SILID-FILL,GREEN); /* 設(shè)填充模式設(shè)填充模式* / floodfill(500,250,1); /* 填充填充 */ getch( ); for(i=0;i15;i +) setfillstyle(HATCH-FILL, i); /* 設(shè)填充線為陰影線設(shè)填充線為陰影線 */ bar( 20*i, 0, 20*(i+1),20); /* 畫矩形條畫矩形條 */ getch( ); closegraph( ); /* 關(guān)閉圖形模式關(guān)閉圖形模式 */ C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序
24、設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁void box(x1, y1, x2, y2, color) /* 畫一個封閉框畫一個封閉框 */int x1, y1, x2, y2, color; setcolor(color); line(x1, y1, x1, y2); line(x1, y1, x2, y1); line(x2, y1, x2, y2); line(x2, y2, x1, y2); 4 4、圖形模式下字符輸出函數(shù)圖形模式下字符輸出函數(shù) 字符輸出字符輸出函數(shù)函數(shù)outtext(str); 作用:作用:在當(dāng)前位置輸出由在當(dāng)前位置輸出由str指定的指定的字符串。字符串。 說明:說明
25、:它能用不同的字型、大小,和不同的顯示它能用不同的字型、大小,和不同的顯示 方向輸出文字。方向輸出文字。C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁 字符輸出屬性函數(shù)字符輸出屬性函數(shù) settextstyle(font, direction, charsize); 作用:作用:改變輸出字符串的字型、大小和方向。改變輸出字符串的字型、大小和方向。 說明:說明:參數(shù)參數(shù)font確定所用的字型;確定所用的字型; direction的值表示字符的顯示方向。它可以的值表示字符的顯示方向。它可以 是是HOR
26、IZ-DIR(水平輸出,值為(水平輸出,值為0),或是),或是 VERT-DIR(垂直輸出,值為(垂直輸出,值為1)。)。 charsize是增加字符大小的倍數(shù)(是增加字符大小的倍數(shù)(0 10)。)。C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁 字符輸出定位函數(shù)字符輸出定位函數(shù) outtextxy(x, y, str); 作用:作用:將將str指向的指向的字符串輸出到窗口位置字符串輸出到窗口位置(x,y)上。上。5 5、視口操作函數(shù)視口操作函數(shù) Turbo C所有圖形函數(shù)實際上都是在視口(即窗口
27、)所有圖形函數(shù)實際上都是在視口(即窗口)上操作的(在沒有定義視口的情況下,它是整個屏幕)。上操作的(在沒有定義視口的情況下,它是整個屏幕)。用戶可以同時建立多個不同大小的視口,用戶可以同時建立多個不同大小的視口,每個視口操作每個視口操作函數(shù)的參數(shù)都是以其左上角(坐標(biāo)為函數(shù)的參數(shù)都是以其左上角(坐標(biāo)為0,00,0)為參考點的)為參考點的相對坐標(biāo)。相對坐標(biāo)。 設(shè)置視口設(shè)置視口函數(shù)函數(shù)setviewport(x1,y1,x2,y2,clipflag); 作用:設(shè)置作用:設(shè)置左上角坐標(biāo)為左上角坐標(biāo)為(x1,y1),右下角坐標(biāo)為,右下角坐標(biāo)為 (x2,y2)的視口。的視口。 說明:說明:clipflag
28、決定是否顯示超出視口的圖形部分。決定是否顯示超出視口的圖形部分。 0顯示;顯示;1不顯示。不顯示。 C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁 視口清除視口清除函數(shù)函數(shù)clearviewport( ); 作用:作用:清除視口內(nèi)的圖形清除視口內(nèi)的圖形。 注意:注意:使用使用setviewport( )函數(shù)函數(shù)可以在屏幕上開辟多可以在屏幕上開辟多個視口,這些視口可以重迭,但最近一次設(shè)置的視口才個視口,這些視口可以重迭,但最近一次設(shè)置的視口才是當(dāng)前視口。各圖形函數(shù)都是在當(dāng)前視口中操作。其它是當(dāng)前視口
29、。各圖形函數(shù)都是在當(dāng)前視口中操作。其它視口中的內(nèi)容只要不被清除,就可以保持在屏幕上。視口中的內(nèi)容只要不被清除,就可以保持在屏幕上。 舉例:舉例:通過改變坐標(biāo)位置移動視口,從而實現(xiàn)一個通過改變坐標(biāo)位置移動視口,從而實現(xiàn)一個 立方體的連續(xù)往左移動。立方體的連續(xù)往左移動。 #include#includemain( ) int gd=DETECT, gm, i; initgraph(&gd,&gm,“tc”); /*圖形系統(tǒng)初始化圖形系統(tǒng)初始化 */ C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下
30、一頁下一頁 cleardevice( ); for(i=0; iBGIOBJ EGAVGA 作用:將驅(qū)動程序作用:將驅(qū)動程序EGAVGA.BGI 轉(zhuǎn)換成相應(yīng)的轉(zhuǎn)換成相應(yīng)的目標(biāo)文件目標(biāo)文件EGAVGA.OBJ。 在在tc子目錄子目錄下輸入命令:下輸入命令: C:TCTLIB LIBgraphics.lib+EGAVGAOBJ 作 用 : 將 目 標(biāo) 文 件作 用 : 將 目 標(biāo) 文 件 E G AV G A O B J 添 加 到添 加 到 graphics.lib 庫文件中。庫文件中。 C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計
31、語言程序設(shè)計上一頁上一頁下一頁下一頁 在用戶程序調(diào)用在用戶程序調(diào)用initgraph()函數(shù)函數(shù)之前應(yīng)加一語句:之前應(yīng)加一語句: registerbgidriver(EGAVGA-driver); 字體驅(qū)動程序的連接類似。經(jīng)過字體驅(qū)動程序的連接類似。經(jīng)過上述處理,經(jīng)編譯上述處理,經(jīng)編譯連接后的執(zhí)行程序便可在任何目錄或其它兼容機(jī)上運連接后的執(zhí)行程序便可在任何目錄或其它兼容機(jī)上運行了。行了。 二、圖形處理庫函數(shù)應(yīng)用示例舉例:設(shè)有一組實驗數(shù)據(jù)存于數(shù)組舉例:設(shè)有一組實驗數(shù)據(jù)存于數(shù)組val中,將它們用曲中,將它們用曲 線表示在線表示在 x-y 坐標(biāo)平面上。坐標(biāo)平面上。 #include#includem
32、ain( ) float val = 3.9,5.3,7.2,9.6,12.9,10.0,23.2,31.4,39.8,50.2, 62.9,56.0,92.0,105.7,122.8,125.7,150.7, 179.3, 203.2,211.0; C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁 char *ch =1,2,3,4,5,6,7,8,9, 10,11,12,13,14, 15,16, 17,18,19,20; int i,j,x1,x2,y1,y2,n; char str10; i
33、nt graphdriver=DETECT,graphmode; registerbgidriver(EGAVGA_driver); initgraph(&graphdriver,&graphmode, ); /* 圖形系統(tǒng)初始化圖形系統(tǒng)初始化 */ cleardevice(); /* 清屏清屏 */ setviewport(20,20,570,450,1); /*開辟一個圖形視口開辟一個圖形視口*/ setcolor(1); /* 置當(dāng)前畫圖顏色為藍(lán)色置當(dāng)前畫圖顏色為藍(lán)色 */ n=20;C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)
34、計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁x1=80; y1=390-1.5*val0;for (i=0;i=n-1;i+) x2=x1+20; y2=390-1.5*vali; setcolor(12); line(x1,y1,x2,y2); /*在兩坐標(biāo)點間連線,形成曲線在兩坐標(biāo)點間連線,形成曲線 */ setcolor(WHITE); circle(x2,y2,1); /* 通過畫小圓圈打點通過畫小圓圈打點 */ x1=x2; y1=y2; setcolor(WHITE);line(80,390,500,390); /* 畫橫軸畫橫軸 */C C語言程序設(shè)計語言程序設(shè)計C
35、C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁 j=0; for (i=100;i=80+n*20;i=i+20) /* 標(biāo)記橫軸刻度標(biāo)記橫軸刻度 */ line(i,390,i,400); outtextxy(i-4,405,chj); j+; outtextxy(200,420,Every times); line(80,390,80,5); /* 畫縱軸畫縱軸 */ for (j=0;j=300;j=j+50) /* 標(biāo)記縱軸刻度標(biāo)記縱軸刻度 */ line(70,390-1.5*j,80,390-1.5*j); sprin
36、tf(str,%d,j); /* 將將j的值轉(zhuǎn)換成串型存于的值轉(zhuǎn)換成串型存于 str 數(shù)組中數(shù)組中 */ outtextxy(45,390-1.5*j-3,str); C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁 settextstyle(0,1,1); outtextxy(30,40,Values); getch(); closegraph(); /* 關(guān)閉圖形模式關(guān)閉圖形模式 */ 11.3 11.3 操作系統(tǒng)接口應(yīng)用操作系統(tǒng)接口應(yīng)用1、DOS 基本組成基本組成 由引導(dǎo)程序模塊、基本輸入輸出
37、系統(tǒng)、文件管理和系由引導(dǎo)程序模塊、基本輸入輸出系統(tǒng)、文件管理和系統(tǒng)調(diào)用模塊、命令處理模塊等幾個部分組成。統(tǒng)調(diào)用模塊、命令處理模塊等幾個部分組成。 C語言可以通過庫函數(shù)實現(xiàn)與操作系統(tǒng)接口,即調(diào)語言可以通過庫函數(shù)實現(xiàn)與操作系統(tǒng)接口,即調(diào)用操作系統(tǒng)中的子程序,從而實現(xiàn)用戶應(yīng)用程序的深層用操作系統(tǒng)中的子程序,從而實現(xiàn)用戶應(yīng)用程序的深層次的開發(fā)。次的開發(fā)。一、DOS 操作系統(tǒng)簡介操作系統(tǒng)簡介 C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁 2、操作系統(tǒng)接口操作系統(tǒng)接口 DOS為用戶引用其功能子程序,利用了系
38、統(tǒng)的軟件為用戶引用其功能子程序,利用了系統(tǒng)的軟件中斷。通過中斷。通過 CPU 的軟中斷指令的軟中斷指令 INT n 調(diào)用相應(yīng)的程序。調(diào)用相應(yīng)的程序。指令中的指令中的n是中斷調(diào)用號(也稱中斷類型號),中斷調(diào)是中斷調(diào)用號(也稱中斷類型號),中斷調(diào)用號不同,則調(diào)用的程序就不同。用號不同,則調(diào)用的程序就不同。 通過軟件中斷調(diào)用通過軟件中斷調(diào)用 BIOS 中的基本中的基本I/O服務(wù)子程序,服務(wù)子程序,這種方法常被稱為低層接口這種方法常被稱為低層接口。常用的有:常用的有:利利用用 INT 10指令調(diào)用有關(guān)顯示器服務(wù)程序;利用指令調(diào)用有關(guān)顯示器服務(wù)程序;利用 INT 16H 指令調(diào)指令調(diào)用鍵盤服務(wù)程序。用鍵
39、盤服務(wù)程序。 例:設(shè)置顯示器顯示模式為例:設(shè)置顯示器顯示模式為320*200彩色圖形模式的彩色圖形模式的匯編語言程序段如下:匯編語言程序段如下:MOV AL,4 ; 設(shè)顯示模式設(shè)顯示模式MOV AH,0 ; 設(shè)功能號設(shè)功能號INT10H ; 系統(tǒng)功能調(diào)用系統(tǒng)功能調(diào)用C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁 通過軟件中斷調(diào)用通過軟件中斷調(diào)用IBMDOS模塊中的功能程序,即所模塊中的功能程序,即所謂系統(tǒng)功能調(diào)用,是高層接口。如謂系統(tǒng)功能調(diào)用,是高層接口。如 INT 21H 指令便是指令便是典型的
40、軟件接口,該接口包括了許多子功能。典型的軟件接口,該接口包括了許多子功能。 例例 :向顯示器輸出字符:向顯示器輸出字符“A”的匯編語言程序段如下:的匯編語言程序段如下:MOV DL,“A” ; 置顯示字符置顯示字符MOV AH,2 ; 設(shè)功能號設(shè)功能號 INT 21H ; 系統(tǒng)功能調(diào)用系統(tǒng)功能調(diào)用 使用這兩種接口,用戶就可以在不與極復(fù)雜的硬件使用這兩種接口,用戶就可以在不與極復(fù)雜的硬件接口打交道的情況下,使用系統(tǒng)資源,開發(fā)各種應(yīng)用軟接口打交道的情況下,使用系統(tǒng)資源,開發(fā)各種應(yīng)用軟件。件。 C語言作為一種中級語言,它的一些庫函數(shù)語言作為一種中級語言,它的一些庫函數(shù)實際上實際上就就是調(diào)用了一些系統(tǒng)
41、功能調(diào)用子程序,是調(diào)用了一些系統(tǒng)功能調(diào)用子程序,用戶可以利用它們用戶可以利用它們來來調(diào)用調(diào)用BIOS及及DOS軟件接口軟件接口,以實現(xiàn)特定功能。,以實現(xiàn)特定功能。C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁二、操作系統(tǒng)接口庫函數(shù)操作系統(tǒng)接口庫函數(shù) 1 1、通用軟中斷調(diào)用庫函數(shù)通用軟中斷調(diào)用庫函數(shù)int86()int86(int intno,union REGS *inregs,union REGS *outregs);說明:參數(shù)說明:參數(shù)intno表示調(diào)用類型號,相當(dāng)于中斷指令表示調(diào)用類型號,相
42、當(dāng)于中斷指令int n調(diào)調(diào) 用的中斷類型號用的中斷類型號n;參數(shù);參數(shù)inregs用于接收調(diào)用功能號用于接收調(diào)用功能號 及相關(guān)的一些入口參數(shù);參數(shù)及相關(guān)的一些入口參數(shù);參數(shù)outregs用于接收調(diào)用用于接收調(diào)用 后的返回值,即出口參數(shù)。后的返回值,即出口參數(shù)。舉例:在屏幕的舉例:在屏幕的35行、行、20列處顯示字符串列處顯示字符串“COMPUTER”。 #include #include #include #define VIDEO 0 x10 /* 10H號軟中斷號軟中斷 */ C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程
43、序設(shè)計上一頁上一頁下一頁下一頁main() union REGS inregs, outregs; inregs.h.ah = 2; /* 2號功能,即設(shè)置光標(biāo)位置號功能,即設(shè)置光標(biāo)位置 */ inregs.h.dh = 35; /* 置行號為置行號為 35 */ inregs.h.dl = 20; /* 置列號為置列號為 20 */ inregs.h.bh = 0; /* 置顯示頁號為置顯示頁號為0 */ clrscr(); int86(VIDEO,&inregs,&outregs); /* 調(diào)用調(diào)用BIOS的子程序?qū)⒐鈽?biāo)定位的子程序?qū)⒐鈽?biāo)定位 */ printf(“COMP
44、UTER”); /* 在當(dāng)前光標(biāo)位置處輸出字符串在當(dāng)前光標(biāo)位置處輸出字符串 */ return(0); C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁2 2、系統(tǒng)功能調(diào)用庫函數(shù)系統(tǒng)功能調(diào)用庫函數(shù) intdos()和和intdosx() intdos(union REGS *inregs, union REGS *outregs ); intdosx(union REGS *inregs, union REGS *outregs, struct REGS *segregs);說明:與說明:與DOS的
45、系統(tǒng)功能調(diào)用(的系統(tǒng)功能調(diào)用(INT 21H)相對應(yīng)。)相對應(yīng)。 參數(shù)參數(shù)inregs是入口參數(shù),表示相應(yīng)的功能號;參數(shù)是入口參數(shù),表示相應(yīng)的功能號;參數(shù) outregs是出口參數(shù),保存調(diào)用后的返回值;參數(shù)是出口參數(shù),保存調(diào)用后的返回值;參數(shù) segregs是一個結(jié)構(gòu)是一個結(jié)構(gòu)SREGS類型的指針,用來設(shè)置和類型的指針,用來設(shè)置和 保存保存CPU段寄存器的值。段寄存器的值。3 3、發(fā)送發(fā)送DOS命令庫函數(shù)命令庫函數(shù) system() system(char *cmd);說明:說明:cmd為為DOS系統(tǒng)下的命令字符串。系統(tǒng)下的命令字符串。C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)
46、計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁三、鼠標(biāo)器及其應(yīng)用 安裝好鼠標(biāo)器驅(qū)動程序,并進(jìn)行初始化后,然后在應(yīng)安裝好鼠標(biāo)器驅(qū)動程序,并進(jìn)行初始化后,然后在應(yīng)用程序中利用用程序中利用 INT 33H 功能調(diào)用管理鼠標(biāo)器的各種操作。功能調(diào)用管理鼠標(biāo)器的各種操作。 例例1:編寫一個編寫一個C語言函數(shù),完成鼠標(biāo)器初始化工作,語言函數(shù),完成鼠標(biāo)器初始化工作, 測試鼠標(biāo)安裝情況,顯示檢查結(jié)果。測試鼠標(biāo)安裝情況,顯示檢查結(jié)果。 #include union REGS regs; int Msinit( ) int recored; regs . x . ax = 0
47、; /* 0# 功能,初始化鼠標(biāo)功能,初始化鼠標(biāo) */ int86(0 x33, ®s, ®s); /* 調(diào)調(diào)BIOS子程序子程序*/ recored = regs . x . ax; /* 調(diào)用結(jié)果返回在調(diào)用結(jié)果返回在AX寄存器中寄存器中 */C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁 if (recored=0) printf(“Mouse not found or Mouse driver not installed.n“); return 0; /* 初始化
48、不成功初始化不成功 */ else return recored; /* 初始化成功初始化成功 */ 例例2:編寫讀取鼠標(biāo)狀態(tài)和鼠標(biāo)位置的函數(shù)。編寫讀取鼠標(biāo)狀態(tài)和鼠標(biāo)位置的函數(shù)。 void Msget ( int *px , int *py , int *pbuttons ) regs . x . ax = 3; /* 調(diào)用調(diào)用3號功能測試鼠標(biāo)器號功能測試鼠標(biāo)器 */ int86(0 x33, ®s, ®s); *px = regs . x . cx; / * 返回鼠標(biāo)位置返回鼠標(biāo)位置 */ *py = regs . x . dx; /* 返回鼠標(biāo)位置返回鼠標(biāo)位置
49、*/ *buttons = regs . x . bx; /* 返回鼠標(biāo)狀態(tài)返回鼠標(biāo)狀態(tài) */ C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁12.4 C12.4 C語言與匯編語言混合編程語言與匯編語言混合編程 由由C語言程序直接調(diào)用匯編語言程序的方法有兩種:一語言程序直接調(diào)用匯編語言程序的方法有兩種:一種是在程序中嵌入?yún)R編代碼或直接調(diào)用匯編語言子程序。種是在程序中嵌入?yún)R編代碼或直接調(diào)用匯編語言子程序。一、匯編語言子程序的一般格式 .MODEL 內(nèi)存模式內(nèi)存模式.DATA ;定義數(shù)據(jù);定義數(shù)據(jù).C
50、ODEPUBLIC _子程序名子程序名 ;說明在;說明在C中調(diào)用的子程序名中調(diào)用的子程序名_子程序名子程序名 PROC 過程類型過程類型 ;子程序體;子程序體RET_子程序名子程序名 ENDP ;子程序定義結(jié)束;子程序定義結(jié)束 END ;程序結(jié)束;程序結(jié)束C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁說明:說明: 1、匯編子程序和、匯編子程序和C語言的內(nèi)存模式應(yīng)一致;語言的內(nèi)存模式應(yīng)一致; 2、 過程類型有過程類型有FAR和和NEAR兩種,表示兩種,表示調(diào)調(diào)用程序和被調(diào)用程序是用程序和被調(diào)用程序是
51、否在同一個段內(nèi);否在同一個段內(nèi); 3、C語言對應(yīng)的匯語言對應(yīng)的匯編語言中,函數(shù)名和變編語言中,函數(shù)名和變量名前多加了一個下劃量名前多加了一個下劃線(線(_),因此在匯編語),因此在匯編語言中,子程序名前應(yīng)有言中,子程序名前應(yīng)有下劃線。下劃線。 舉例:匯編語言子程序示例。舉例:匯編語言子程序示例。 .model small .datatime db 10 ;10毫秒毫秒.code public _delay ;延遲延遲10ms_delay proc mov bl , time delay: mov cx, 2801 wait: loop wait dec bl jnz delay ret_del
52、ay endp endC C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁二、全局變量的傳遞 C語言程序(語言程序(extern)和匯編語言程序()和匯編語言程序(public)可)可以通過全局變量傳遞信息,其數(shù)據(jù)類型的對應(yīng)關(guān)系如以通過全局變量傳遞信息,其數(shù)據(jù)類型的對應(yīng)關(guān)系如下表所示。下表所示。 由于由于C語言大小寫是有區(qū)別的,從而在與匯編語言語言大小寫是有區(qū)別的,從而在與匯編語言混合編程時,最好在混合編程時,最好在options菜單下的菜單下的Linker子項中將子項中將Case-Sensitive
53、Link置成置成off狀態(tài)來取消狀態(tài)來取消其區(qū)別。其區(qū)別。 C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁三、參數(shù)和返回值的傳遞 C語言程序和匯編語言程序的參數(shù)傳遞是通過堆棧語言程序和匯編語言程序的參數(shù)傳遞是通過堆棧來完成的。所謂堆棧,實質(zhì)就是一種先進(jìn)后出的內(nèi)存來完成的。所謂堆棧,實質(zhì)就是一種先進(jìn)后出的內(nèi)存區(qū)域,且只在一端進(jìn)行出棧和入棧操作。區(qū)域,且只在一端進(jìn)行出棧和入棧操作。 對對C語言而言,參數(shù)進(jìn)棧的順序是從右到左。如在語言而言,參數(shù)進(jìn)棧的順序是從右到左。如在C語言程序中有語句語言程序中有語句
54、power2(int para1,int para2),則,則執(zhí)行該語句時堆棧中的內(nèi)容如下圖執(zhí)行該語句時堆棧中的內(nèi)容如下圖所示,所示,通過通過sp便可便可得到參數(shù)值,從而完成參數(shù)的數(shù)據(jù)傳遞。得到參數(shù)值,從而完成參數(shù)的數(shù)據(jù)傳遞。C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁舉例:設(shè)某舉例:設(shè)某C語言程序如下:語言程序如下: #include “stdio.h” int power2(int,int); main( ) printf(“2 的的4次方乘以次方乘以8為為:%d”, power2(8,4)
55、 ); 當(dāng)匯編語言子程序有返回值時,是通過當(dāng)匯編語言子程序有返回值時,是通過ax和和dx寄存器來寄存器來進(jìn)行傳遞的。進(jìn)行傳遞的。 C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁匯編語言子程序如下:匯編語言子程序如下: .model small .code public _power2 _power2 proc push bp mov bp, sp mov ax, bp+4 ; 將第一個參數(shù)的值將第一個參數(shù)的值8送到送到ax中中 mov cx, bp+6 ; 將第二個參數(shù)的值將第二個參數(shù)的值4送到送
56、到cx中中 shl ax, cl ; 將將ax的內(nèi)容左移的內(nèi)容左移cl次次,每移一次表示乘每移一次表示乘2 pop bp ret _power2 endp endC C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁四、匯編語言子程序的匯編及與C程序的連接 1、在集成環(huán)境下,進(jìn)行混合編程的程序編譯連接時,、在集成環(huán)境下,進(jìn)行混合編程的程序編譯連接時,需要先用宏匯編(需要先用宏匯編(MASM.EXE)將匯編語言程序進(jìn)行)將匯編語言程序進(jìn)行匯編,生成匯編,生成OBJ文件。然后,將此文件。然后,將此OBJ文件加
57、入到文件加入到C程程序中。最后進(jìn)行連接,生成序中。最后進(jìn)行連接,生成EXE文件。文件。 2、將、將OBJ文件加入到文件加入到C程序,對程序,對Turbo C而言,非常而言,非常簡單。先編輯一個工程文件(簡單。先編輯一個工程文件(*.prj),其內(nèi)容是需要連),其內(nèi)容是需要連接的匯編接的匯編OBJ文件和文件和C語言文件名列表,如:語言文件名列表,如: myc.c mymasm.obj3、然后在、然后在Turbo C的集成環(huán)境中選擇的集成環(huán)境中選擇 project 主菜單中主菜單中的的 project name 項,將上面項,將上面編輯的工程文件名寫入,便編輯的工程文件名寫入,便可進(jìn)行連接。可進(jìn)行
58、連接。 C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁五、內(nèi)嵌匯編指令的C 程序結(jié)構(gòu) 在在C程序嵌入?yún)R編指令的格式為:程序嵌入?yún)R編指令的格式為: asm 例如:例如:int max(int a,int b) asm mov ax,a asm cmp ax,b asm jg ok asm mov ax,b ok:return _ax ; /*_ax為為Turbo C定義的偽寄存器變量名定義的偽寄存器變量名*/C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C
59、 C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁說明:說明: 在匯編語言代碼中使用的在匯編語言代碼中使用的C語言變量應(yīng)該初始化語言變量應(yīng)該初始化 且用且用ptr指明對應(yīng)的匯編語言類型;指明對應(yīng)的匯編語言類型; 偽指令如偽指令如 db 等不能嵌入;等不能嵌入; 在在_asm 塊中的注釋為匯編語言的注釋,即分號;塊中的注釋為匯編語言的注釋,即分號; 不應(yīng)在不應(yīng)在 _asm 塊中用塊中用 ret 指令返回,而應(yīng)用指令返回,而應(yīng)用C語言語言 的的return返回;返回; 匯編語言指令不需以分號(;)作語句結(jié)束;匯編語言指令不需以分號(;)作語句結(jié)束; 也可用也可用“_asm ”的的 形式加一行匯編
60、語言指令。形式加一行匯編語言指令。 C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計C C語言程序設(shè)計語言程序設(shè)計上一頁上一頁下一頁下一頁例如:例如: #include iostream.hint asmmax(int a,int b) int maxn=0; /* 初始化初始化maxn */ _asm mov ax,word ptr a ; 將將a的值賦給的值賦給ax寄存器寄存器 mov dx,word ptr b ; 將將b的值賦給的值賦給dx寄存器寄存器 cmp ax,dx ; 比較比較ax和和dx的大小的大小 jg ok ; ax比比dx大則轉(zhuǎn)標(biāo)號大則轉(zhuǎn)標(biāo)號ok處處 mov ax,dx ; 將將dx的值賦給的值賦給axok: _asm mov word ptr maxn,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)內(nèi)部溝通協(xié)作平臺建設(shè)方案
- 江西省九江市都昌縣2024-2025學(xué)年八年級上學(xué)期期末生物試題(含答案)
- 北京延慶區(qū)2024-2025學(xué)年高二上學(xué)期期末生物學(xué)試題(含答案)
- 三農(nóng)用物資采購管理作業(yè)指導(dǎo)書
- 從理論到實踐科學(xué)探究活動課
- 青稞種植知識培訓(xùn)課件
- 電商直播平臺搭建與運營服務(wù)協(xié)議
- 數(shù)學(xué)王國里的智慧讀后感
- 電子支付平臺推廣專項資金協(xié)議
- 智能供應(yīng)鏈管理服務(wù)合同
- 第13課-香港和澳門的回歸
- 人教部編版三年級下冊道德與法治 1、我是獨特的 教案
- 合同法合同的效力教學(xué)課件
- 檳榔的危害教學(xué)課件
- 2023年高考英語真題試題及答案精校版(湖北卷)
- 羅沙司他治療腎性貧血中國專家共識
- 2015-2022年蘇州信息職業(yè)技術(shù)學(xué)院高職單招語文/數(shù)學(xué)/英語筆試參考題庫含答案解析
- 中國古代茶具課件
- 養(yǎng)生之道傳統(tǒng)體育養(yǎng)生學(xué)
- (最新整理)骨科圍手術(shù)期病人的護(hù)理課件
- 民間文學(xué)(全套課件)
評論
0/150
提交評論