版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第10章 图形函数、系统调用和与汇编语言的接口,*重点与难点 10.1 图形函数 10.2 系统调用 10.3 C语言与汇编语言的接口 *本章小结 *作业,重点与难点,重点:图形系统的使用;系统调用和与汇编语言接口。 难点:系统调用和与汇编语言的接口。,10.1 图形函数,C语言提供了丰富的图形函数,所有图形函数均包含在头文件graphics.h中。使用图形库函数必须包含: #include,图形系统应用,1、初始化图形模式 2、退出图形化模式 3、画图程序举例 4、独立运行的图形程序建立,1、初始化图形模式,int gdriver=DETECT,gmode; initgraph( 譬如:gd
2、river:VGA (9) gmode:VGAHI (2) 色调:16色 分辨率:640X480,2、退出图形化模式,closegraph();,3、画图程序举例(例10.1),#include #include main() int gdriver=DETECT, gmode,ErrorCode; initgraph( ,4、独立运行的图形程序建立,有些图形程序在没有安装Turbo C的计算机中不能运行: BGI Error: Graphics not initialized (use initgraph) 原因:C语言中,对于用initgraph函数直接进行的图形初始化程序, 在编译和链接
3、时并没有将相应的驱动程序(*.BGI)装入到执行程序。当程序执行到intitgraph函数调用语句时, 再从该函数中第三参数char *path中所规定的路径中去寻找相应的驱动程序。,建立的步骤,1、将驱动程序转换成目标文件。以EGA、VGA显示驱动为例,在TC目录下输入命令:BGIOBJ EGAVGA (功能是将EGAVGA.BGI转换成EGAVGA.OBJ) 2、将驱动程序的目标模块装到GRAPHICS.LIB库文件。为了将第1步生成的目标文件装到图形库文件中,输入命令: TLIB LIBGRAPHICS.LIB+EGAVGA 3、图形初始化时进行注册。在程序中initgraph函数调用之
4、前增加registerbgidriver(EGAVGA_driver);函数调用语句,通知连接程序在连接时把EGAVGA的驱动程序装入到用户的执行程序中。,独立运行的图形程序(例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 系统调用,1、ROM-BIOS系统调用 2、DOS系统调用,1、ROM
5、-BIOS系统调用,(1)BIOS中断调用 (2)BIOS中断调用函数 (3)举例,(1)BIOS中断调用,(2)BIOS中断调用函数,1、函数原型 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的显示器输入输出系统调用编写光标定位函数。,#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系统调用,可以调用int86函数来实现;也可以调用bdos函数和intdos函数。 bdos函数仅使用
7、DX寄存器和AL寄存器。 intdos函数可以使用除DX寄存器和AL寄存器之外的其他寄存器。,bdos函数,函数原型 int bdos(int dosfun, unsigned dosdx, unsigned dosal) 其中:输入参数中dosfun为系统调用号,dosdx、dosal是赋值给DX、AL寄存器的值,函数返回寄存器AX的值。,功能:是执行DOS系统调用INT 21H,bdos函数应用(例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函数,函数原型 int intdos(union REGS *inregs, union REGS *outregs) 功能 本函数执行DOS中断21H来调用一个指定的DOS函数,用户定义的寄存器值存于共用体inregs中,执行完成后函数将返回的寄存器值存于共用体outregs中。,intdos函数应用(例10.10),#include main() union REGS inregs,outregs; int y
9、ear,month,day,week; char *weekday; inregs.h.ah=0 x2A; intdos( ,直接访问PC机的I/O端口函数,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 编程实现在微机接口技术中使用ADC0809芯片进行中断方式的数据采集。,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语言与汇编语言的接口,10.3.1 在C语言中调用汇编语言子程序 10.3.2 在C语言中使用嵌入汇编,10.3.1 在C语言中调用汇编语言子程序,1、参数的传递 2
12、、值的返回 3、段与组 4、汇编语言子程序的框架 5、操作步骤,1、参数的传递,采用堆栈来传递传数 C语言的源程序中的参数按其出现顺序的相反顺序被压入堆栈,如函数MAX(INT V1,INT V2),参数V2先入栈,其次V1入栈。 类型转换 (unsigned) char-(unsigned) int float-double,2、值的返回,经过汇编程序处理的结果,通过AX、DX寄存器返回给C主程序。 语言中数据类型与汇编语言返回值之间的关系,3、段与组(C语言存储命名约定),4、汇编语言子程序的框架,_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中取出参数(大模式) 从BP+4,BP+6,, BP+2+2N中取出参数(小模式) 结果(返回参数)放在AX、BX、CX和DX中 POP BP RET ENDP _TEXT ENDS END,注意,1、在汇编子程序中供C语言程序使用的变量名和过程名前必须加上下划线,以便与C语言程序中的命名一致。 2、在汇编子程序中供C语言程序使用的变量和函数,必须用public说明。在C语言中也必须用extern对汇编变量和函数进行说明。 3、汇编子程序中变量的定义必须与C语言程序中变量的说
14、明一致。 4、必须使C程序中汇编模块调用语句的函数名与汇编语言中的过程名大、小写一致。,汇编语言和C语言中数据类型对照,5、操作步骤,首先分别建立C程序文件以及汇编子程序文件,汇编子程序的扩展名为asm。 使用汇编程序MASM将汇编子程序汇编形成目标文件(扩展名为OBJ)。 在TURBO C的环境下编译C程序文件,形成目标文件。 使用TLINK连接C程序和汇编子程序的目标文件,形成可执行文件。 执行程序进行验证和调试。,例10.13 在C语言中调用汇编子程序在屏幕上(30,50)的位置显示一个“*”字符。,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语言中使用嵌入汇编,嵌入汇编:在程序中直接编写汇编语言代码,程序中嵌入汇编后可以不用分号作为语句的结束符,但需以关键词asm开头嵌入一个汇编指令。 例如: asm mov ax,dx,例10.14 使用嵌入汇编代码的方式,求出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. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年可持续旅游品牌环保材料应用
- 2026年专升本(心理学)模拟试题及答案解析
- 2026年西藏自治区专业技术人员职称业务考试(水产)复习题及答案
- 透水模块化人工湿地防堵塞研究
- 雨期专项施工方案
- 【备考2026】吉林省中考模拟数学试卷3(含解析)
- 2026年国家级检验检测机构资质认定评审员考试试题及答案(河北张家口)
- 工作设计院规章管理制度(2篇)
- 含钒碱渣综合利用回收氢氧化铝项目水土保持报告表
- 河南校2026届高三数学上学期天一小高考二试题【含答案】
- 重庆市2025年高考真题化学试卷(含答案)
- 家长进课堂科学课件
- 江苏苏州2024~2025学年高二下册6月期末考试数学试题含解析
- DB1331∕T 054-2023 雄安新区建筑节能与绿色建筑工程施工质量验收标准
- 四川省江油市五校2025年七年级英语第二学期期末联考试题含答案
- 污水处理中菌藻共生系统的污染物去除机理及技术应用现状研究
- 湖北省武汉市2018年中考物理真题试卷(含答案)
- 教育学原理 课件 马工程 8-教学;9-教师与学生;10-教育科学研究
- PDCA循环降低低分子肝素注射皮下出血发生率医院护理质量改善案例
- 数据中心运维服务投标方案
- 《深圳市建设工程施工工期定额》(2018)2018.1.3许
评论
0/150
提交评论