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:
Visual C++ assembler in line code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 cr0 CXX0017: Error: symbol "cr0" not found
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; }Pouvez vous m'aider SVP?
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; }
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; }
Partager