- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第9章 BIOS和DOS调用
* * 第四节 DOS调用 练习:9号功能调用 (屏幕显示字符串,设在紧凑模式下编译) char far *p = ”hello$”; int oldds =_DS; _DS = FP_SEG(p); _DX = FP_OFF(p); ?_AH = 9; geninterrupt(0x21); _DS = oldds; 第十三章 文 件 * * 第四节 DOS调用 例9.5: 例9.6: 例9.7: 以上三例请参阅教材并运行程序 第十三章 文 件 * * 第五节 BIOS和DOS系统调用函数 除了geninterrupt()函数外,下面几个函数可用于BIOS或DOS调用: int86() BIOS、DOS调用均可 int86x() BIOS、DOS调用均可 intdos() DOS调用 intdosx DOS调用 intr() BIOS、DOS调用均可 第十三章 文 件 * * 一、int86() 原型: int int86(int intr_num, union REGS* inregs, union REGS* outregs); 第一个参数表示中断调用的类型号,相当于INT n中的n 第二和第三个参数都是指针,指向共用体变量,前者用于指明“功能号和入口参数所存放的位置”,后者指明“出口参数所存放的位置” 函数返回值在AX中 int86()进行BIOS或DOS功能调用时,段地址必须是固定的(不能跨段使用)。 第十三章 文 件 * * 共用体类型REGS是在dos.h中定义的: struct WORDREGS{ ????? unsigned int ax, bx, cx, dx, si, di, cflag, flags; //都是变量名 }; struct BYTEREGS{ ??????? unsigned char al, ah, bl, bh, cl, ch, dl, dh; //都是变量名 }; union REGS{ ??????? struct WORDREGS x; ??????? struct BYTEREGS h; }; 一、int86() 用来存储标志寄存器_FLAGS中的进位标志位,以验证成功或失败(0:成功,1:失败) 第十三章 文 件 * * 一、int86() 可以想象, 函数的定义大体是: int int86(int n, union REGS* in, union REGS* out); { _AX=in-x.ax; _BX=in-x.bx; _CX=in-x.cx; … _FLAGS=in-x.flags; geninterrupt(n); out-x.ax=_AX; out-x.bx=_BX; … return _AX; } 未必都执行(由n决定执行哪些) 未必都执行 第十三章 文 件 * * 例9.8 从键盘读入一个字符(同例9.1) 键盘I/O中断调用号是 16H,调用0号功能可读入字符。使用时必须将功能号放在AH中,出口参数是:AH=扫描码,AL=ASCII码。 主要代码: char c; union REGS inregs, outregs; inregs.h.ah = 0 ; //使用0号功能 c = int86(0x16, inregs, outregs); //返回AX的值 printf(“%c\n”, c); 此行也可以写成如下两行: int86(0x16, inregs, outregs); c = outregs.h.al; 一、int86() 第十三章 文 件 * * 例9.9 写一个函数,可将光标定位到(x,y)处 分析:这是视频BIOS调用中的2号功能调用 入口参数:功能号送AH,光标行、列号分别送DH和DL。 BH为显示页号,选0。 出口参数:无 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(0x10, regs, regs); } int main() { clrscr(); putchar(A); movetoxy(10
文档评论(0)