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))
&leftsign;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
INT16U *pvect;
pvect = (INT16U *)MK_FP(0×0000, 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();
&rightsign;
直接访问0X0000地址,找了半天资料,发现这个;
#include <stdio.h>
#include <dos.h>
main(int argc, char **argv)
&leftsign;
unsigned int far *vecbase = MK_FP(0×0000, 0×0000);
int int_num;
if(argc == 1) &leftsign;
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);
&rightsign;
if((argv[1][0] == \’x\’) &line;&line; (argv[1][0] == \’X\’)) &leftsign;
for(int_num = 0; int_num < 256; int_num++) &leftsign;
printf("INT %02Xh vector = ", int_num);
printf("%04X:%04X\\n",vecbase[int_num * 2 + 1],vecbase[int_num * 2]);
&rightsign;
&rightsign; else &leftsign;
if(sscanf(argv[1],"%X", &int_num)) &leftsign;
printf("INT %02Xh vector = ", int_num);
printf("%04X:%04X\\n", vecbase[int_num * 2 + 1], vecbase[int_num * 2]);
&rightsign; else
printf("Error: bad number\\n");
&rightsign;
&rightsign;
好像是打印所有的中断向量?
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
历史博文
- 嵌入式Linux学习笔记(二)-GPIO接口 - 2010
- 20081124 c# throw catch - 2009
- 20071024 uclinux kvm Illegal instruction - 2008
- 20070223 php sqlite blog cms - 2007
- 0318 儿子 智慧泉 早教 唐诗 - 2006
- 自我释放-管理是个? - 2005
- 乱七八糟猜想19wga20裁员 - 2005