for(i=0;i<256;i++)
{
asm mov dx,0x1f0
asm in ax,dx
asm mov n,ax
m[i]=n;}
asm sti
s=m;
for(i=0;i<512;i++)
printf("%x",*(s+i));}
main()
{int i=0;unsigned char m[512];
one();
getchar();
printf("\n");
}
two
# include<stdio.h>
# include<dos.h>
void rwsisk(int cmd,unsigned char *buff1, int head1, int track1, int
sector1 )
{ unsigned char buff[512];
int head, track, sector;
unsigned long lba ;unsigned int seg,off;
unsigned char *p; unsigned char a1,a2,a3,a4;
int i;
unsigned int flag2;
unsigned char flag;
p=buff;
outportb(0x1f6,0xa0);
outportb(0x1f7,0xec);
while(flag!=0x58)
flag=inportb(0x1f7);
for(i=0;i<256;i++) /*读出256字节的信息*/
{ flag2=inport(0x1f0);
*p++=(flag2<<8)>>8; /*把且出的字分割成两个字节*/
*p++=(flag2>>8);
}
printf("%d\n",sizeof(long));
sleep(1);
track=(int)(buff[3]*256)+buff[2];
head=(int)(buff[7]*256)+buff[6];
sector=(int)(buff[0x0d]*256)+buff[0x0c];
printf("cidao%d\n",track);
printf("citou%d\n",head);
printf("sanqu%d",sector);
lba=track1*head*sector+head1*sector+sector1-1;/*计算出lab的直*/
printf("\n%u",lba);
getchar();
seg=FP_SEG(lba);
off=FP_OFF(lba);
a1=(unsigned char)((lba<<24)>>24);
a2=(unsigned char)((lba<<16)>>24);
a3=(unsigned char)((lba<<8)>>24);
a4=(unsigned char) (lba>>24);
p=buff1;
a4=(a4&0xf)+128+64+32;
outportb(0x1f0,0);
outportb(0x1f2,1);
outportb(0x1f3,a1);
outportb(0x1f4,a2);
outportb(0x1f5,a3);
outportb(0x1f6,a4);
if(cmd==2)
{outportb(0x1f7,0x20);
while(1)
{flag=inportb(0x1f7);
if(flag==0x58)
break;}
for(i=0;i<256;i++) /*读出256字节的信息*/
{ flag2=inport(0x1f0);
*p++=(flag2<<8)>>8; /*把且出的字分割成两个字节*/
*p++=(flag2>>8);
}
}
if(cmd==3)
{ outportb(0x1f7,0x30);
while(1)
{flag=inportb(0x1f7);
if(flag==0x58)
break;}
for(i=0;i<256;i++) /*读出256字节的信息*/
{p=p+1;
flag2=(unsigned int)(*p)*256+*(p-1);
p=p+1;
outport(0x1f0,flag2); }
}
}
main()
{unsigned char buffer[512];int i;
rwsisk(2,buffer,1,128,1);
for(i=0;i<512;i++)
printf("%x",buffer[i]);
rwsisk(2,buffer,1,12,1);
for(i=0;i<512;i++)
printf("%x",buffer[i]);
}