Bonjour !

Soit le code suivant, qui marche parfaitement bien sous emu8086 :

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
23
24
 
      mov si, 0
      mov cx, 4
      mov di, 4
 
      boucle:
      mov si, circuit[di]
 
      mov ax, entrees[si-1]
      mov bx, entrees[si]
 
      ;code porte nand
      and ax,bx
      not ax
      and ax,1
 
      mov entrees[si+1], ax
 
      add di, 6
 
      loop boucle
 
     circuit dw 2,4,1,2,3,1,3,4,2,3,5,4,5,6
     entrees dw 0,0,0,0,0,0,0,0,0,0,0,0

J'ai besoin de ce code assembleur dans un programme réalisé en C... il sert a effectuer une operation logique sur les valeurs d'un tableau.

Une fois réécrit pour visual C :

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
23
24
25
26
27
28
29
 
int evalCircuit(long* circuit, long* entrees)
 {
    __asm {
      ;initialisation
      mov esi, 0
      mov ecx, 4
      mov edi, 4
 
      boucle:
      mov esi, circuit[edi]
 
      mov eax, entrees[esi-1]      //le tableau esi commence a 0, je dois donc soustraire l'indice de 1
      mov ebx, entrees[esi]
 
      ;code porte nand
      and eax,ebx
      not eax
      and eax,1
 
      mov entrees[esi+1], eax
 
      add edi, 6
 
      loop boucle
    }
 
   return entrees[NbPortes+NbEntrees];
 }
Le problème est le suivant, dans mon VC++ Express, le code assembleur ne fonctionne pas (le débugger non plus, ce qui ne me facilite pas la tache) et j'ai le droit a une violation d'accès en lecture dès que le programme arrive au code assembleur...

Merci d'avance !