![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-10-31 10:46 |
共 47,815 主题排行 / 349,930 发帖 / 今日 0 篇 / 48,290 会员排行 |
| DOS开发编程 & 发展交流 (开发室) » C语言使用中断跳转指令RET示例! |
| 可打印版本 1,442 / 3 |
| 第1楼 xy_god | 发表于 2003-11-07 00:00 |
| 中级用户 发帖 56 积分 276 | |
|
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={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={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 } |
|
| 第2楼 xy_god | 发表于 2003-11-07 00:00 |
| 中级用户 发帖 56 积分 276 | |
|
上次些了个汇编的执行机器指令的代码居然没有人回,这次来个C语言版的,看看是不是可以共同研究一下!呵呵!
|
|
| 第3楼 gale | 发表于 2004-02-03 00:00 |
| 初级用户 发帖 17 积分 139 | |
|
这个太麻烦,直接这样即可:
void retf(int destseg,int destoff) /*跳转到destseg:destoff去运行*/ { asm push destseg asm push destoff asm retf } |
|
| 第4楼 qb45 | 发表于 2004-02-03 00:00 |
| 高级用户 发帖 194 积分 677 | |
|
我能不能来个QB的??
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |