lba 程序

1 view
Skip to first unread message

my12...@gmail.com

unread,
Oct 31, 2005, 7:03:57 AM10/31/05
to java home
# include<stdio.h>
# include<bios.h>
void one()
{unsigned int m[256];int i=0; unsigned int n ;unsigned char *s;
unsigned long lba=63551;
unsigned char a1,a2,a3,a4;
a1=(unsigned char)((lba<<24)>>24);
a2=(unsigned char)((lba<<16)>>24);
a3=(unsigned char)((lba<<8)>>24);
a4=(unsigned char) (lba>>24);
for(i=0;i<256;i++)
{m[i]=0; }
asm mov dx,0x1f0
asm add dx,0x7
wfhil1:
asm in al,dx
asm test al,128
asm jnz wfhil1
asm cli
asm xor ax,ax
asm mov dx,0x1f0
asm inc dx
asm out dx,al
asm inc dx
asm mov al,1
asm out dx,al
asm inc dx
asm mov al,a1
asm out dx,al
asm inc dx
asm mov al,a2
asm out dx,al
asm inc dx
asm mov al,a3
asm out dx,al
asm inc dx
asm mov al,a4
asm and al,15
asm add al,0
asm add al,224
asm out dx,al
asm inc dx
asm mov al,0x20
asm out dx,al
asm sti
hdwait_read:
asm in al,dx
asm and al,128
asm jnz hdwait_read
asm cli

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]);
}

Reply all
Reply to author
Forward
0 new messages