[SOS] Probe memory
LfvrChris at aol.com
LfvrChris at aol.com
Lun 20 Déc 16:46:15 CET 2004
Bonjour,
Pour répondre à la question de Thomas, voilà dans quoi j'ai trouvé
l'instruction "wbinvd". J'ai trouvé cette instruction dans une fonction qui
"probe" la mémoire. Cette onction est une alternative aux interruptions. En effet,
sur certaines configurations mémoires, les interruptions ne renvoie pas une
image correcte de la taille mémoire. Quand je parle de la mémoire, je parle de
celle située au-delà des 1 Mo que l'on nomme extended memory ou mémoire
étendue.
Il rest encore quelques points à éclaircir en ce qui concerne le code
ci-dessous. Notamment l'instruction suivante:
asm("":::"memory");
Que veut-elle dire ?
Quelle est son rôle ?
Et voilà le code pour Thomas avec l'instruction "wbinvd":
unsigned long count_memory(void)
{
register unsigned long *mem;
unsigned long mem_count, mem_end, bse_end, a;
unsigned short memkb;
unsigned char irq1, irq2;
unsigned long cr0;
irq1=inb(0x21);
irq2=inb(0xA1);
outb(0x21, 0xFF);
outb(0xA1, 0xFF);
mem_count=0;
memkb=0;
asm volatile ("wbinvd");
do
{
memkb++;
mem_count+=1024*1024;
mem=(unsigned long*)mem_count;
a=*mem;
*mem=0x55AA55AA;
asm("":::"memory");
if(*mem!=0x55AA55AA)
mem_count=0;
else
{
*mem=0xAA55AA55;
asm("":::"memory");
if(*mem!=0xAA55AA55)
mem_count=0;
}
asm("":::"memory");
*mem=a;
} while(memkb<4096 && mem_count!=0);
mem_end=memkb<<10;
mem=(unsigned long*)0x413;
bse_end=((*mem)&0xFFFF)<<6;
outb(0x21, irq1);
outb(0xA1, irq2);
return mem_end;
}
Krys.
-------------- section suivante --------------
Une pièce jointe HTML a été enlevée...
URL: http://the-doors.enix.org/pipermail/sos/attachments/20041220/45cff952/attachment.html
Plus d'informations sur la liste de diffusion Sos