哪位朋友帮我看看我的int15 ah=87,为何用的不对啊???
我是将代码弄成C的。
我发在这里的原因,是 问题主要就是用以上中断的问题。
unsigned char TheBuffer[50];
unsigned char Buffer[20];
//参数seg在这里是段基址,offset是偏移,需要取得值在他们表示的后16字节后。
int fetch_high(unsigned int seg,unsigned int offset)
{
unsigned long i,j;
union REGS in,out;
struct SREGS segregs;
for(i=0;i<16;i++)
{
TheBuffer[i] = 0;
TheBuffer[0x20 + i] = 0;
}
TheBuffer[0x10]=16;
TheBuffer[0x11]=0;
TheBuffer[0x12]=peekb(seg,offset + 0x10);
TheBuffer[0x13]=peekb(seg,offset + 0x11);
TheBuffer[0x14]=peekb(seg,offset + 0x12);
TheBuffer[0x15]=0x93;
TheBuffer[0x16]=0;
TheBuffer[0x17]=peekb(seg,offset + 0x13);
TheBuffer[0x18]=16;
TheBuffer[0x19]=0;
//得到当前数组的地址。
i = FP_OFF(Buffer);
j = FP_SEG(Buffer);
j = j & 0xFFFF;
j = j * 16 + i & 0xFFFF;
TheBuffer[0x1A]=j & 0xFF;
TheBuffer[0x1B]=j & 0xFF00;
TheBuffer[0x1C]=j & 0xFF0000;
TheBuffer[0x1D]=0x93;
TheBuffer[0x1E]=0;
TheBuffer[0x1F]=j & 0xFF000000;
segregs.es = FP_SEG(TheBuffer);
in.x.si = FP_OFF(TheBuffer);
in.h.ah = 0x87;
in.x.cx = 8;
for(i=0;i<16;i++)
printf("%2x ",TheBuffer[i]);
printf("\n");
for(i=0;i<16;i++)
printf("%2x ",TheBuffer[0x10 + i]);
printf("\n");
for(i=0;i<16;i++)
printf("%2x ",TheBuffer[0x20 + i]);
printf("\n");
int86x(0x15, &in, &out, &segregs);
if(out.x.cflag == 1)
{
printf("fetch_high error \n");
return 0;//error
}
for(i=0;i<16;i++)
printf("%d ",Buffer[i]);
return 1;
}