IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Problème d'asm dans mon code C


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Problème d'asm dans mon code C
    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 !

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Truffo
    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.
    Pourquoi tu n'écris pas ce code en 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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio2.h>
     
    static void display (unsigned long *a, size_t n)
    {
       size_t i;
     
       for (i = 0; i < n; i++)
       {
          printf ("%2lu ", a[i]);
       }
       printf ("\n");
    }
     
    int main (void)
    {
    /* circuit dw 2,4,1,2,3,1,3,4,2,3,5,4,5,6 */
       unsigned long circuit[] = { 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 */
       unsigned long entrees[12] = { 0 };
     
    /* mov si, 0 */
       int si = 0;
     
    /* mov cx, 4 */
       int cx;
     
    /* mov di, 4 */
       int di = 1;
     
    /* boucle: */
       for (cx = 0; cx < 4; cx++)
       {
     
    /* mov si, circuit[di] */
          unsigned long si = circuit[di];
     
    /* mov ax, entrees[si-1] */
          unsigned long ax = entrees[si - 1];
     
    /* mov bx, entrees[si] */
          unsigned long bx = entrees[si];
     
    /* ;code porte nand */
    /* and ax,bx */
          ax &= bx;
     
    /* not ax */
          ax = ~ax;
     
    /* and ax,1 */
          ax &= 1;
     
    /* mov entrees[si+1], ax */
          entrees[di + 1] = ax;
     
    /* add di, 6 */
          di++;
     
          display (entrees, sizeof entrees / sizeof *entrees);
     
    /* loop boucle */
       }
     
       return 0;
    }

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Je préfererai, ca serai bien plus simple, mais je ne programme pas cela pour le plaisir, il s'agit d'un projet de fac, et je suis obligé de réaliser cette fonction en assembleur...

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Truffo
    Je préfererai, ca serai bien plus simple, mais je ne programme pas cela pour le plaisir, il s'agit d'un projet de fac, et je suis obligé de réaliser cette fonction en assembleur...
    Pourquoi ? Des hommes en noir ont menacé d'enlever ton canari ?

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Ca c'est constructif...

    On me demande de faire une fonction en assembleur, si je la fait pas en assembleur, ca sert a rien de faire le projet... et j'veux au moins essayer d'avoir mon année.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] Accolade dans mon code
    Par une_tite_question dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 29/09/2008, 13h55
  2. Problème d'affichage dans mon code
    Par naima2005 dans le forum Applets
    Réponses: 3
    Dernier message: 02/12/2007, 11h52
  3. Problème try-catch dans mon code
    Par little pepito dans le forum Langage
    Réponses: 7
    Dernier message: 11/06/2007, 12h22
  4. [Upload] Problème pour uploader un fichier dans mon code
    Par Peuplarchiste dans le forum Langage
    Réponses: 2
    Dernier message: 27/05/2006, 09h48
  5. Problème de paramètres dans mon code javascript
    Par cocacollection dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 15/03/2006, 10h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo