PC_DOSSaveReturn(); /* Save environment to return to DOS */ PC_VectSet(VECT_DOS_CHAIN, PC_TickISR); /* Store MS-DOS's tick to chain */ void PC_VectSet (INT8U vect, void (*isr)(void)) { #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ OS_CPU_SR cpu_sr; #endif INT16U *pvect; pvect = (INT16U *)MK_FP(0x0000, vect * 4); /* Point into IVT at desired vector location */ OS_ENTER_CRITICAL(); *pvect++ = (INT16U)FP_OFF(isr); /* Store ISR offset */ *pvect = (INT16U)FP_SEG(isr); /* Store ISR segment */ OS_EXIT_CRITICAL(); } 直接访问0X0000地址,找了半天资料,发现这个; #include <stdio.h> #include <dos.h> main(int argc, char **argv) { unsigned int far *vecbase = MK_FP(0x0000, 0x0000); int int_num; if(argc == 1) { printf("INTVEC Shows interrupt vector for an interrupt\n"); printf("usage: intvec <IntNum &line; X>\n"); printf("X shows all 256 interrupt vectors\n"); exit(0); } if((argv[1][0] == 'x') &line;&line; (argv[1][0] == 'X')) { for(int_num = 0; int_num < 256; int_num++) { printf("INT %02Xh vector = ", int_num); printf("%04X:%04X\n",vecbase[int_num * 2 + 1],vecbase[int_num * 2]); } } else { if(sscanf(argv[1],"%X", &int_num)) { printf("INT %02Xh vector = ", int_num); printf("%04X:%04X\n", vecbase[int_num * 2 + 1], vecbase[int_num * 2]); } else printf("Error: bad number\n"); } } 好像是打印所有的中断向量? INT FAh vector = 0080:0001 INT FBh vector = 7C00:0001 INT FCh vector = 4CFA:4E4C INT FDh vector = 0202:F000 INT FEh vector = 0002:4C72 INT FFh vector = 02F8:03F8 字体:大 中 小 |