C課程設(shè)計(jì)-第10章 圖形函數(shù)、系統(tǒng)調(diào)用和與匯編語(yǔ)言的接口.ppt_第1頁(yè)
C課程設(shè)計(jì)-第10章 圖形函數(shù)、系統(tǒng)調(diào)用和與匯編語(yǔ)言的接口.ppt_第2頁(yè)
C課程設(shè)計(jì)-第10章 圖形函數(shù)、系統(tǒng)調(diào)用和與匯編語(yǔ)言的接口.ppt_第3頁(yè)
C課程設(shè)計(jì)-第10章 圖形函數(shù)、系統(tǒng)調(diào)用和與匯編語(yǔ)言的接口.ppt_第4頁(yè)
C課程設(shè)計(jì)-第10章 圖形函數(shù)、系統(tǒng)調(diào)用和與匯編語(yǔ)言的接口.ppt_第5頁(yè)
已閱讀5頁(yè),還剩33頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第10章 圖形函數(shù)、系統(tǒng)調(diào)用和與匯編語(yǔ)言的接口,*重點(diǎn)與難點(diǎn) 10.1 圖形函數(shù) 10.2 系統(tǒng)調(diào)用 10.3 C語(yǔ)言與匯編語(yǔ)言的接口 *本章小結(jié) *作業(yè),重點(diǎn)與難點(diǎn),重點(diǎn):圖形系統(tǒng)的使用;系統(tǒng)調(diào)用和與匯編語(yǔ)言接口。 難點(diǎn):系統(tǒng)調(diào)用和與匯編語(yǔ)言的接口。,10.1 圖形函數(shù),C語(yǔ)言提供了豐富的圖形函數(shù),所有圖形函數(shù)均包含在頭文件graphics.h中。使用圖形庫(kù)函數(shù)必須包含: #include,圖形系統(tǒng)應(yīng)用,1、初始化圖形模式 2、退出圖形化模式 3、畫(huà)圖程序舉例 4、獨(dú)立運(yùn)行的圖形程序建立,1、初始化圖形模式,int gdriver=DETECT,gmode; initgraph( 譬如:gd

2、river:VGA (9) gmode:VGAHI (2) 色調(diào):16色 分辨率:640X480,2、退出圖形化模式,closegraph();,3、畫(huà)圖程序舉例(例10.1),#include #include main() int gdriver=DETECT, gmode,ErrorCode; initgraph( ,4、獨(dú)立運(yùn)行的圖形程序建立,有些圖形程序在沒(méi)有安裝Turbo C的計(jì)算機(jī)中不能運(yùn)行: BGI Error: Graphics not initialized (use initgraph) 原因:C語(yǔ)言中,對(duì)于用initgraph函數(shù)直接進(jìn)行的圖形初始化程序, 在編譯和鏈接

3、時(shí)并沒(méi)有將相應(yīng)的驅(qū)動(dòng)程序(*.BGI)裝入到執(zhí)行程序。當(dāng)程序執(zhí)行到intitgraph函數(shù)調(diào)用語(yǔ)句時(shí), 再?gòu)脑摵瘮?shù)中第三參數(shù)char *path中所規(guī)定的路徑中去尋找相應(yīng)的驅(qū)動(dòng)程序。,建立的步驟,1、將驅(qū)動(dòng)程序轉(zhuǎn)換成目標(biāo)文件。以EGA、VGA顯示驅(qū)動(dòng)為例,在TC目錄下輸入命令:BGIOBJ EGAVGA (功能是將EGAVGA.BGI轉(zhuǎn)換成EGAVGA.OBJ) 2、將驅(qū)動(dòng)程序的目標(biāo)模塊裝到GRAPHICS.LIB庫(kù)文件。為了將第1步生成的目標(biāo)文件裝到圖形庫(kù)文件中,輸入命令: TLIB LIBGRAPHICS.LIB+EGAVGA 3、圖形初始化時(shí)進(jìn)行注冊(cè)。在程序中initgraph函數(shù)調(diào)用之

4、前增加registerbgidriver(EGAVGA_driver);函數(shù)調(diào)用語(yǔ)句,通知連接程序在連接時(shí)把EGAVGA的驅(qū)動(dòng)程序裝入到用戶的執(zhí)行程序中。,獨(dú)立運(yùn)行的圖形程序(例10.3),#include #include main() int gdriver=DETECT,gmode; registerbgidriver(EGAVGA_driver); initgraph( gdriver, gmode,); bar3d(50,50,250,150,20,1); getch(); closegraph(); ,10.2 系統(tǒng)調(diào)用,1、ROM-BIOS系統(tǒng)調(diào)用 2、DOS系統(tǒng)調(diào)用,1、ROM

5、-BIOS系統(tǒng)調(diào)用,(1)BIOS中斷調(diào)用 (2)BIOS中斷調(diào)用函數(shù) (3)舉例,(1)BIOS中斷調(diào)用,(2)BIOS中斷調(diào)用函數(shù),1、函數(shù)原型 int int86(int intno,union REGS *inregs,union REGS *outregs) 2、入口信息 輸入指針名.x.寄存器名=要賦的值(入口信息); 3、出口信息 變量名=輸出指針名.x.寄存器名;,REGS,struct WORDREGS unsigned int ax, bx, cx, dx, si, di, cflag, flags; struct BYTEREGS unsigned char al, ah

6、, bl, bh, cl, ch, dl, dh; union REGS struct WORDREGS x;struct BYTEREGS h;,例10.5 使用10H的顯示器輸入輸出系統(tǒng)調(diào)用編寫(xiě)光標(biāo)定位函數(shù)。,#include #include #include void movetoxy(int x,int y) union REGS regs; regs.h.ah=2; regs.h.dh=y; regs.h.dl=x; regs.h.bh=0; int86(0 x10, ,2、DOS系統(tǒng)調(diào)用,可以調(diào)用int86函數(shù)來(lái)實(shí)現(xiàn);也可以調(diào)用bdos函數(shù)和intdos函數(shù)。 bdos函數(shù)僅使用

7、DX寄存器和AL寄存器。 intdos函數(shù)可以使用除DX寄存器和AL寄存器之外的其他寄存器。,bdos函數(shù),函數(shù)原型 int bdos(int dosfun, unsigned dosdx, unsigned dosal) 其中:輸入?yún)?shù)中dosfun為系統(tǒng)調(diào)用號(hào),dosdx、dosal是賦值給DX、AL寄存器的值,函數(shù)返回寄存器AX的值。,功能:是執(zhí)行DOS系統(tǒng)調(diào)用INT 21H,bdos函數(shù)應(yīng)用(例10.8),#include #include char current_drive(void) char curdrive; curdrive = bdos(0 x19,0,0); retur

8、n(A + curdrive); main( ) printf(The current drive is %c:n, current_drive(); getch();,intdos函數(shù),函數(shù)原型 int intdos(union REGS *inregs, union REGS *outregs) 功能 本函數(shù)執(zhí)行DOS中斷21H來(lái)調(diào)用一個(gè)指定的DOS函數(shù),用戶定義的寄存器值存于共用體inregs中,執(zhí)行完成后函數(shù)將返回的寄存器值存于共用體outregs中。,intdos函數(shù)應(yīng)用(例10.10),#include main() union REGS inregs,outregs; int y

9、ear,month,day,week; char *weekday; inregs.h.ah=0 x2A; intdos( ,直接訪問(wèn)PC機(jī)的I/O端口函數(shù),1、void outportb(int port, int value) 2、void outportw(int port, int value) 3、int value=inportb(int port) 4、int value=inportw(int port) 5、void enable(void) 6、void disable(void) 7、void interrupt(*getvect(int intr_num) 8、void

10、 setvect(int intr_num, void interrupt(*isr)() 9、int bioscom(int cmd, char abyte, int port),例10.12 編程實(shí)現(xiàn)在微機(jī)接口技術(shù)中使用ADC0809芯片進(jìn)行中斷方式的數(shù)據(jù)采集。,include #include void interrupt far adc_proc(); main() void (interrupt far *mode)(); disable(); mode=getvect(0 x0a); setvect(0 x0a,adc_proc); enable(); outport(0 x220

11、,00); while(!kbhit(); setvect(0 x0a,mode); ,void interrupt far adc_proc() unsigned char result; disable(); result=inport(0 x220); printf(DIGIAL=%dn,result); outport(0 x220,00); outport(0 x220,0 x20); enable(); ,10.3 C語(yǔ)言與匯編語(yǔ)言的接口,10.3.1 在C語(yǔ)言中調(diào)用匯編語(yǔ)言子程序 10.3.2 在C語(yǔ)言中使用嵌入?yún)R編,10.3.1 在C語(yǔ)言中調(diào)用匯編語(yǔ)言子程序,1、參數(shù)的傳遞 2

12、、值的返回 3、段與組 4、匯編語(yǔ)言子程序的框架 5、操作步驟,1、參數(shù)的傳遞,采用堆棧來(lái)傳遞傳數(shù) C語(yǔ)言的源程序中的參數(shù)按其出現(xiàn)順序的相反順序被壓入堆棧,如函數(shù)MAX(INT V1,INT V2),參數(shù)V2先入棧,其次V1入棧。 類(lèi)型轉(zhuǎn)換 (unsigned) char-(unsigned) int float-double,2、值的返回,經(jīng)過(guò)匯編程序處理的結(jié)果,通過(guò)AX、DX寄存器返回給C主程序。 語(yǔ)言中數(shù)據(jù)類(lèi)型與匯編語(yǔ)言返回值之間的關(guān)系,3、段與組(C語(yǔ)言存儲(chǔ)命名約定),4、匯編語(yǔ)言子程序的框架,_TEXT SEGMENT PARA PUBLIC CODE ASSUME CS:_TEXT

13、 PUBLIC FAR PROC FAR PUSH BP MOVE BP,SP 從BP+6,BP+8,, BP+4+2N中取出參數(shù)(大模式) 從BP+4,BP+6,, BP+2+2N中取出參數(shù)(小模式) 結(jié)果(返回參數(shù))放在AX、BX、CX和DX中 POP BP RET ENDP _TEXT ENDS END,注意,1、在匯編子程序中供C語(yǔ)言程序使用的變量名和過(guò)程名前必須加上下劃線,以便與C語(yǔ)言程序中的命名一致。 2、在匯編子程序中供C語(yǔ)言程序使用的變量和函數(shù),必須用public說(shuō)明。在C語(yǔ)言中也必須用extern對(duì)匯編變量和函數(shù)進(jìn)行說(shuō)明。 3、匯編子程序中變量的定義必須與C語(yǔ)言程序中變量的說(shuō)

14、明一致。 4、必須使C程序中匯編模塊調(diào)用語(yǔ)句的函數(shù)名與匯編語(yǔ)言中的過(guò)程名大、小寫(xiě)一致。,匯編語(yǔ)言和C語(yǔ)言中數(shù)據(jù)類(lèi)型對(duì)照,5、操作步驟,首先分別建立C程序文件以及匯編子程序文件,匯編子程序的擴(kuò)展名為asm。 使用匯編程序MASM將匯編子程序匯編形成目標(biāo)文件(擴(kuò)展名為OBJ)。 在TURBO C的環(huán)境下編譯C程序文件,形成目標(biāo)文件。 使用TLINK連接C程序和匯編子程序的目標(biāo)文件,形成可執(zhí)行文件。 執(zhí)行程序進(jìn)行驗(yàn)證和調(diào)試。,例10.13 在C語(yǔ)言中調(diào)用匯編子程序在屏幕上(30,50)的位置顯示一個(gè)“*”字符。,PUBLIC _show _show PROC near push bp mov bp,

15、sp push ds mov ax,0 push ax mov ah,2 mov bh,0 mov dh,20 mov dl,25 int 10h mov ah,9,mov al,byte ptrbp+4 mov bh,0 mov bl,7 mov cx,1 int 10h pop ax pop ds mov sp,bp pop bp ret _show endp,10.3.2 在C語(yǔ)言中使用嵌入?yún)R編,嵌入?yún)R編:在程序中直接編寫(xiě)匯編語(yǔ)言代碼,程序中嵌入?yún)R編后可以不用分號(hào)作為語(yǔ)句的結(jié)束符,但需以關(guān)鍵詞asm開(kāi)頭嵌入一個(gè)匯編指令。 例如: asm mov ax,dx,例10.14 使用嵌入?yún)R編代碼的方式,求出20和10,600和800的較小值。,#include stdio.h #include conio.h int min(int x,int y) asm mov ax,x; asm cmp ax,y; asm jle minexit; asm mov ax,y; minexit: ret

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論