




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章图形函数、系统调用和与汇编语言的接口*重点与难点10.1图形函数10.2系统调用10.3C语言与汇编语言的接口*本章小结*作业重点与难点重点:图形系统的使用;系统调用和与汇编语言接口。难点:系统调用和与汇编语言的接口。10.1图形函数C语言提供了丰富的图形函数,所有图形函数均包含在头文件graphics.h中。使用图形库函数必须包含:
#include<graphics.h>图形系统应用1、初始化图形模式2、退出图形化模式3、画图程序举例4、独立运行的图形程序建立1、初始化图形模式intgdriver=DETECT,gmode;initgraph(&gdriver,&gmode,"d:\\tc");譬如:gdriver:VGA(9)gmode:VGAHI(2)
色调:16色分辨率:640X4802、退出图形化模式closegraph();3、画图程序举例(例10.1)#include<graphics.h>#include<conio.h>main(){intgdriver=DETECT,gmode,ErrorCode;
initgraph(&gdriver,&gmode,"d:\\tc");ErrorCode=graphresult();if(ErrorCode!=grOk){printf("GraphicsSystemError:%s\n",grapherrormsg(ErrorCode));exit(1);}
setbkcolor(10);setcolor(2);bar3d(50,50,250,150,20,1);getch();
cleardevice();
setfillstyle(3,LIGHTBLUE);cleardevice();setbkcolor(YELLOW);bar(60,80,300,320);getch();closegraph();}4、独立运行的图形程序建立有些图形程序在没有安装TurboC的计算机中不能运行:BGIError:Graphicsnotinitialized(use'initgraph')原因:C语言中,对于用initgraph函数直接进行的图形初始化程序,在编译和链接时并没有将相应的驱动程序(*.BGI)装入到执行程序。当程序执行到intitgraph函数调用语句时,再从该函数中第三参数char*path中所规定的路径中去寻找相应的驱动程序。建立的步骤1、将驱动程序转换成目标文件。以EGA、VGA显示驱动为例,在TC目录下输入命令:BGIOBJEGAVGA↙
(功能是将EGAVGA.BGI转换成EGAVGA.OBJ)2、将驱动程序的目标模块装到GRAPHICS.LIB库文件。为了将第1步生成的目标文件装到图形库文件中,输入命令:TLIBLIB\GRAPHICS.LIB+EGAVGA↙3、图形初始化时进行注册。在程序中initgraph函数调用之前增加registerbgidriver(EGAVGA_driver);函数调用语句,通知连接程序在连接时把EGAVGA的驱动程序装入到用户的执行程序中。独立运行的图形程序(例10.3)#include<stdio.h>#include<graphics.h>main(){intgdriver=DETECT,gmode;
registerbgidriver(EGAVGA_driver);initgraph(gdriver,gmode,"");bar3d(50,50,250,150,20,1);getch();closegraph();}10.2系统调用1、ROM-BIOS系统调用2、DOS系统调用1、ROM-BIOS系统调用(1)BIOS中断调用(2)BIOS中断调用函数(3)举例(1)BIOS中断调用系统调用号系统功能系统调用号系统功能10H显示器16H键盘11H设备检验17H打印机12H内存大小18H驻留BASIC13H磁盘19H引导14H通讯1AH时钟15HI/O系统扩充1BH软盘(2)BIOS中断调用函数1、函数原型
intint86(intintno,unionREGS*inregs,unionREGS*outregs)2、入口信息输入指针名.x.寄存器名=要赋的值(入口信息);3、出口信息变量名=输出指针名.x.寄存器名;REGSstructWORDREGS
{unsignedintax,bx,cx,dx,si,di,cflag,flags;}structBYTEREGS{unsignedcharal,ah,bl,bh,cl,ch,dl,dh;}unionREGS{structWORDREGSx;structBYTEREGSh;}例10.5使用10H的显示器输入输出系统调用编写光标定位函数。
#include<stdio.h>#include<conio.h>#include<dos.h>voidmovetoxy(intx,inty){unionREGSregs;
regs.h.ah=2;regs.h.dh=y;regs.h.dl=x;regs.h.bh=0;int86(0x10,®s,®s);}main(){clrscr();movetoxy(20,10);printf("Tobeseverewithoneselfandlenientwithothers.");getch();}2、DOS系统调用可以调用int86函数来实现;也可以调用bdos函数和intdos函数。bdos函数仅使用DX寄存器和AL寄存器。intdos函数可以使用除DX寄存器和AL寄存器之外的其他寄存器。bdos函数函数原型intbdos(intdosfun,unsigneddosdx,unsigneddosal)
其中:输入参数中dosfun为系统调用号,dosdx、dosal是赋值给DX、AL寄存器的值,函数返回寄存器AX的值。功能:是执行DOS系统调用INT21Hbdos函数应用(例10.8)#include<stdio.h>#include<dos.h>charcurrent_drive(void){charcurdrive;curdrive=bdos(0x19,0,0);return('A'+curdrive);}main(){printf("Thecurrentdriveis%c:\n",current_drive());getch();}intdos函数函数原型intintdos(unionREGS*inregs,unionREGS*outregs)功能
本函数执行DOS中断21H来调用一个指定的DOS函数,用户定义的寄存器值存于共用体inregs中,执行完成后函数将返回的寄存器值存于共用体outregs中。
intdos函数应用(例10.10)#include<dos.h>main(){unionREGSinregs,outregs;intyear,month,day,week;char*weekday;inregs.h.ah=0x2A;
intdos(&inregs,&outregs);year=outregs.x.cx;month=outregs.h.dh;day=outregs.h.dl;week=outregs.h.al;switch(week){case0:weekday="Sunday";break;case1:weekday="Monday";break;case2:weekday="Tuesday";break;case3:weekday="Wednesday";break;case4:weekday="Thursday";break;case5:weekday="Friday";break;case6:weekday="Saturday";}printf("Todayis%s,%d/%d/%d\n",weekday,month,day,year);}直接访问PC机的I/O端口函数1、voidoutportb(intport,intvalue)2、voidoutportw(intport,intvalue)3、intvalue=inportb(intport)4、intvalue=inportw(intport)5、voidenable(void)6、voiddisable(void)7、voidinterrupt(*getvect(intintr_num))8、voidsetvect(intintr_num,voidinterrupt(*isr)())9、intbioscom(intcmd,charabyte,intport)例10.12编程实现在微机接口技术中使用ADC0809芯片进行中断方式的数据采集。
include<stdio.h>#include<dos.h>voidinterruptfaradc_proc();main(){void(interruptfar*mode)();disable();mode=getvect(0x0a);
setvect(0x0a,adc_proc);
enable();outport(0x220,00);while(!kbhit()){};setvect(0x0a,mode);}voidinterruptfaradc_proc(){unsignedcharresult;disable();result=inport(0x220);printf("DIGIAL=%d\n",result);outport(0x220,00);
outport(0x220,0x20);
enable();}10.3C语言与汇编语言的接口10.3.1在C语言中调用汇编语言子程序10.3.2在C语言中使用嵌入汇编10.3.1在C语言中调用汇编语言子程序1、参数的传递2、值的返回3、段与组4、汇编语言子程序的框架5、操作步骤1、参数的传递采用堆栈来传递传数
C语言的源程序中的参数按其出现顺序的相反顺序被压入堆栈,如函数MAX(INTV1,INTV2),参数V2先入栈,其次V1入栈。类型转换
(unsigned)char->(unsigned)intfloat->double2、值的返回经过汇编程序处理的结果,通过AX、DX寄存器返回给C主程序。语言中数据类型与汇编语言返回值之间的关系C程序中的数据类型汇编语言返回值寄存器内容整型、字符型、near指针长整型远程指针AX高字节在DX中,低字节在AX中段值在DX中,偏移量在AX中3、段与组(C语言存储命名约定)段名内容_BSS
(FILENAME)_DATA
FAR_DATA
FAR_BSS
STACK(FILENAME)_TEXT未初始化的全局变量和静态变量(在源文件中显式说明为far或huge类型的除外)已初始化的全局变量和静态变量(在源文件中显式说明为far或huge类型的除外)在源文件中显式说明为far或huge类型的已初始化的全局变量和静态变量在源文件中显式说明为far或huge类型的未初始化的全局变量和静态变量局部变量(包括函数入口参数和函数内定义的自动变量)代码段4、汇编语言子程序的框架[<文件名>]_TEXTSEGMENTPARAPUBLIC'CODE'ASSUMECS:<文件名>_TEXTPUBLICFAR<子程序名>PROCFARPUSHBPMOVEBP,SP
从BP+6,BP+8,…,BP+4+2N中取出参数(大模式)
[从BP+4,BP+6,…,BP+2+2N中取出参数(小模式)]<子程序体>
结果(返回参数)放在AX、BX、CX和DX中
POPBPRET<子程序名>ENDP[<文件名>]_TEXTENDSEND注意1、在汇编子程序中供C语言程序使用的变量名和过程名前必须加上下划线,以便与C语言程序中的命名一致。2、在汇编子程序中供C语言程序使用的变量和函数,必须用public说明。在C语言中也必须用extern对汇编变量和函数进行说明。3、汇编子程序中变量的定义必须与C语言程序中变量的说明一致。4、必须使C程序中汇编模块调用语句的函数名与汇编语言中的过程名大、小写一致。汇编语言和C语言中数据类型对照
C语言数据类型汇编语言数据类型数据长度(字节)Charintshortlongfloat/doubleDBBYTEDWWORDDDWORDDQQWORD12485、操作步骤①首先分别建立C程序文件以及汇编子程序文件,汇编子程序的扩展名为asm。②使用汇编程序MASM将汇编子程序汇编形成目标文件(扩展名为OBJ)。③在TURBOC的环境下编译C程序文件,形成目标文件。④使用TLINK连接C程序和汇编子程序的目标文件,形成可执行文件。⑤执行程序进行验证和调试。例10.13在C语言中调用汇编子程序在屏幕上(30,50)的位置显示一个“*”字符。
PUBLIC_show_showPROCnearpushbpmovbp,sppushdsmovax,0pushaxmovah,2movbh,0movdh,20movdl,25int10hmovah,9
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 网络隔离机(卡)项目安全风险评价报告
- 遵义师范学院《中国通史古代》2023-2024学年第二学期期末试卷
- 江苏省南京市琅琊路小学明发滨江分校2025届小升初复习数学模拟试卷含解析
- 赣南医学院《空间构成与表现》2023-2024学年第二学期期末试卷
- 温州科技职业学院《城乡规划设计基础1》2023-2024学年第二学期期末试卷
- 三峡大学《流行音乐配器法(1)》2023-2024学年第二学期期末试卷
- 河北地质大学华信学院《民航服务礼仪》2023-2024学年第二学期期末试卷
- 甘肃林业职业技术学院《药理学及实验》2023-2024学年第二学期期末试卷
- 盐城师范学院《口述史实践》2023-2024学年第二学期期末试卷
- 吉林省延边重点中学2024-2025学年初三校际联合检测试题(二模)化学试题含解析
- 第二单元“中华传统文化经典研习”说课稿 2024-2025学年统编版高中语文选择性必修上册001
- 2024年德州市人民医院高层次卫技人才招聘笔试历年参考题库频考点附带答案
- 订单与合同管理制度
- 【MOOC期末】《英美文学里的生态》(北京林业大学)期末中国大学慕课MOOC答案
- 外科患者疼痛护理与管理
- 《家校社协同育人“教联体”工作方案》专题培训
- 2024年六西格玛黄带认证考试练习题库(含答案)
- 儿童牙齿分龄护理方案
- 2023-2024学年广东省深圳市宝安区七年级(下)期中英语试卷
- DB43T 2558-2023 城镇低效用地识别技术指南
- 中国心力衰竭诊断和治疗指南2024解读(完整版)
评论
0/150
提交评论