[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