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 |
|