DepanneTonPC, dépannage et aide informatique

Bienvenue : Connexion | Inscription
La date/heure actuelle est 28 Nov 2024 à 8:15 FAQ | Rechercher | Membres | Groupes

Problème d'assembleur...


 
 
Ce que nous vous conseillons :
  1. Lisez les réponses ci-dessous où vous trouverez des conseils et de l'aide de la part des autres utilisateurs
  2. Avant de faire des modifications sur votre système ou d'installer des logiciels, nous vous recommandons fortement de cliquer ici pour scanner Windows afin de détecter les erreurs de registre.
Poster un nouveau sujet   Répondre au sujet    DepanneTonPC Index du Forum -> Programmation et Graphisme
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
truffo



Inscrit le: 31 Oct 2005
Messages: 120

MessagePosté le: 08 Juin 2007 à 18:40    Sujet du message: Problème d'assembleur... Répondre en citant

Bonjour !

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


Code:

                ;initialisation
      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


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 transcrit (pour passer a des registres 32 bits, y'a pas grand chose a faire mais c'est un mal nécéssaire) on a ca (le code est inclu dans une fonction) :

Code:
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 !

Razz 
 
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
mickael44
Administrateur


Inscrit le: 05 Juin 2005
Messages: 5837
Localisation: Rennes / Ille Et Vilaine

MessagePosté le: 08 Juin 2007 à 22:13    Sujet du message: Répondre en citant

Salut,

J'ai pas reçu beaucoup de leçons en assembleur mais je n'arrive pas à voir comment ton code fonctionne.

"circuit" doit être quelque chose mais je ne le voie pas dans ton code ....

Pareil pour "entrees".

Donc, on pour la version C mais comment t'est tu débrouiller dans la version assembleur ...

Peut-tu expliquer le principe du programme et comment il fonctionne ? 
 
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Envoyer un e-mail
truffo



Inscrit le: 31 Oct 2005
Messages: 120

MessagePosté le: 09 Juin 2007 à 11:18    Sujet du message: Répondre en citant

Autant pour moi, j'ai oublié la déclaration de tableaux dans le code emu8086 :


Code:
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
  
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
Ajouter à : Scoopeo del.icio.us Digg this Technorati fuzz
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    DepanneTonPC Index du Forum -> Programmation et Graphisme Toutes les heures sont au format GMT + 2 Heures
 
Page 1 sur 1 

 
Sauter vers:  

Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum