Hello world

J'ai traduis depuis un cod en assembleur GCC en assembleur en ligne pour Visual C ++. Sa compile bien mais quand je débogue les applications freeze quand elle rencontre le registre cr0. L'espion m'indique des valeurs pour tout les registres sauf cr0. Malgre que je soit en mode Kernel j'ai cette erreur:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
cr0	CXX0017: Error: symbol "cr0" not found
Visual C++ assembler in line code:


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
void disableCache(void)
{
   uint32_t mask = (1 << 30) | (1 << 29);
   __asm
   {
      mov ecx,mask
      mov eax,cr0
      or eax,ecx
      mov cr0,eax
   }
  return;
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
void enableCache(void) 
{
	uint32_t mask = ~((1 << 30) | (1 << 29)); // CD | NW
	  __asm
   {
      mov ecx,mask
      mov eax,cr0
      and eax,ecx
      mov cr0,eax
   }
  return;
}
Pouvez vous m'aider SVP?

THX

NB: le code original en GCC inline.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
void disableCache(void) {
  uint32_t mask = (1 << 30) | (1 << 29); // CD | NW
  __asm__ __volatile__ ("movl %%cr0,%%eax\n"
                        "orl %%ecx,%%eax\n"
                        "movl %%eax,%%cr0"
                        :
                        :"c"(mask)
                        :"eax","memory");
  return;
}
 
void enableCache(void) {
  uint32_t mask = ~((1 << 30) | (1 << 29)); // CD | NW
  __asm__ __volatile__ ("movl %%cr0,%%eax\n"
                        "andl %%ecx,%%eax\n"
                        "movl %%eax,%%cr0"
                        :
                        :"c"(mask)
                        :"eax","memory");
  return;
}