中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » C语言使用中断跳转指令RET示例!
作者:
标题: C语言使用中断跳转指令RET示例! 上一主题 | 下一主题
xy_god
中级用户

疯狂的流浪者


积分 276
发帖 56
注册 2003-9-25
状态 离线
『楼 主』:  C语言使用中断跳转指令RET示例!

C语言使用中断跳转指令RET示例! /*********************************************/ /*    C语言使用中断跳转指令示例     */ /*       作者:xy_god         */ /*      tc2.0下调试通过        */ /*********************************************/ #include "dos.h" #include "stdio.h" #include "conio.h" void setretint();         /*设置96H中断为中断跳转中断,                    入口地址如下:x,段地址;bx,偏                    移地址*/ void retf(int destseg,int destoff);/*跳转到destseg:destoff去运行*/ main()/*****************主函数**************************/ { int segsrc=0x2000,offsrc=0x0000;int i=0; char abscode[25]={0x00,0x0D,0xB4,0x09,0x00,0x0F,/*机器指令代码*/          0xB0,0x2A,0x00,0x11,0xB7,0x00,          0x00,0x13,0xB3,0xDA,0x00,0x15,          0xB9,0x05,0x00,0x00,0x18,0xCD,0x10}; for(i=0;i<=24;i++) pokeb(segsrc,offsrc+i,abscode); setretint(); retf(0x2000,0x000); } void retf(int destseg,int destoff) /*跳转到destseg:destoff去运行*/ { asm mov cx,destseg asm mov bx,destoff asm int 96h } void setretint()/*设置96H中断为中断跳转中断,          入口地址如下:          cx,段地址,bx,偏移地址*/ { int segsrc=0x1000,offsrc=0x0000;int i=0; char abscode[7]={0x8B,0xC1, /*MOV   AX,CX*/          0x50,   /*PUSH  AX  */          0x8B,0xC3,/*MOV   AX,BX*/          0x50,   /*PUSH  AX  */          0xCB};  /*RETF     */ for(i=0;i<=6;i++) pokeb(segsrc,offsrc+i,abscode); asm MOV AX,1000h /*设置96h中断的入口地址*/ asm MOV DS,AX asm MOV DX,0000h asm MOV AL,96h asm MOV AH,25H asm INT 21H }




临河居士 http://www.xygod.pc5.org
2003-11-7 00:00
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
xy_god
中级用户

疯狂的流浪者


积分 276
发帖 56
注册 2003-9-25
状态 离线
『第 2 楼』:  

上次些了个汇编的执行机器指令的代码居然没有人回,这次来个C语言版的,看看是不是可以共同研究一下!呵呵!




临河居士 http://www.xygod.pc5.org
2003-11-7 00:00
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
gale
初级用户




积分 139
发帖 17
注册 2004-2-3
状态 离线
『第 3 楼』:  

这个太麻烦,直接这样即可: void retf(int destseg,int destoff) /*跳转到destseg:destoff去运行*/ { asm push destseg asm push destoff asm retf }


2004-2-3 00:00
查看资料  发送邮件  访问主页  发短消息  网志   编辑帖子  回复  引用回复
qb45
高级用户




积分 677
发帖 194
注册 2003-9-13
状态 离线
『第 4 楼』:  

我能不能来个QB的??




我(QB45)的照片与简历 www.programfan.com/club/showbb ...
2004-2-3 00:00
查看资料  发送邮件  发短消息  网志  OICQ (406930019)  编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: