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 :

Lire un code à partir d'un fichier


Sujet :

C

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 208
    Points : 60
    Points
    60
    Par défaut Lire un code à partir d'un fichier
    Bonjour,

    quelqu'un pourrai m'expliquer ce qu'on doit faire je suis dans les nuages :s

    réaliser un interprète de langage (ordinateur en papier), autrement dit un programme qui lit le code d'un autre programme, puis effectue ce que le processeur fictif ferait pour exécuter ce code!: un émulateur.

    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
    mnémonique   opcode      interprétation
      add #             20           A <-- A + V
      add @            60          A <-- A + (@)
    add * @           E0          A <-- A + * (@)
      sub #             21          A <-- A - V
      sub @           61          A <-- A - (@)
    sub * @           E1         A <-- A - * (@)
     nand #             22         A <--  ¬ [A & V]
      nand @          62         A <--  ¬ [A & (@)]
      nand * @        E2         A <--  ¬ [A &*(@)]
       load #            00         A <-  V
      load @           40          A <-   (@)
      load * @          C0        A <-  *(@)
      store @           48        (@) <--  A 
      store * @        C8        * (@) <--  A
      in @               49         (@) <--  entrée 
      in * @             C9        *(@) <--  entrée
      out @             41         sortie <--  (@)
      out * @           C1         sortie <--  *(@)
      jump @          10          PC <--  @
      brn @            11          si A < 0 : PC <-- @
      brz @            12          si A = 0 : PC <-- @

    help merci

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 195
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 195
    Points : 17 163
    Points
    17 163
    Par défaut
    A priori, il te faut choisir le plus simple: poser des questions à celui qui t'a donné le sujet.
    En l'occurence, j'imagine que c'est un professeur.

    Il te faut savoir à quoi doit ressembler le processeur: registres? mémoire? langage à supporter?

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Ça a l'air d'être le processeur minimal mentionné par un de mes professeurs: Juste un accumulateur, un compteur programme et un registre d'adresse utilisé uniquement en interne.

    Le code posté étant une liste des instructions supportées, et @ doit représenter une adresse immédiate.
    Donc, (@) doit être équivalent de *@, et *(@) équivalent de **@.

    En gros, il faut faire un truc du genre:
    Code C : 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
    int memoire[TAILLE];
    int a;
    int pc;
    int ad;
     
    for(pc=0 ; ; )
    {
    	switch(memoire[pc++])
    	{
    	case 0x20: /* add# */
    		a += memoire[pc++];
    		break;
    	case 0x60: /* add@ */
    		/*Je pourrais simplement écrire a += memoire[memoire[pc++]], 
    		  mais ça serait franchement moins lisible*/
    		ad = memoire[pc++]; 
    		a += memoire[ad];
    		break;
    	case 0xE0: /* add*@ */
    		ad = memoire[pc++];
    		ad = memoire[ad];
    		a += memoire[ad];
    		break;
    	/*etc.*/
    	}
    }
    Edit: Ajout de break manquants.

  4. #4
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 208
    Points : 60
    Points
    60
    Par défaut
    Merci beaucoup pour la réponse je comprend mieux ce qu'on doit faire

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 208
    Points : 60
    Points
    60
    Par défaut
    Bonjour,

    Est ce que c'est bien comme ça que je dois faire ??

    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
     
     
    int memoire[256];
    int a;
    int pc ; 
    int ad;
     
    for (pc = 0; ; )
    {
    	switch(memoire[pc++])
    	{
    	case 0x20: /* add# */
    		a += memoire[pc++];
    		break;
    	case 0x60: /* add@ */
    		/*Je pourrais simplement écrire a += memoire[memoire[pc++]], 
    		  mais ça serait franchement moins lisible*/
    		ad = memoire[pc++]; 
    		a += memoire[ad];
    		break;
    	case 0xE0: /* add*@ */
    		ad = memoire[pc++];
    		ad = memoire[ad];
    		a += memoire[ad];
    		break;
    	case 0x21: //A <- A-V
    		a = a - memoire[pc++];
    		break;
    	case 0x60: //A <- A-@
    		ad = memoire[pc++]; 
    		a = a - memoire[ad];
    		break;
    	case 0xE0: //A <- A-*@
    		ad = memoire[pc++];
    		ad = memoire[ad];
    		a = a - memoire[ad];
    		break;
    	case 0x22: // A <- !(A & V)
    		a = !(a & memoire[pc++]);
    		break;
    	case 0x62: // A <- !(A & @)
    		ad = memoire[pc++]; 
    		a = !(a & memoire[ad]);
    		break;
    	case 0xE2: // A <- !(A & *@)
    		ad = memoire[pc++];
    		ad = memoire[ad];
    		a = !(a & memoire[ad]);
    		break;
    	case 0x00: // A <- V
    		a = memoire[pc++];
    		break;
    	case 0x40: // A <- @
    		ad = memoire[pc++]; 
    		a = memoire[ad];
    		break;
    	case 0xC0: // A <- *@
    		ad = memoire[pc++];
    		ad = memoire[ad];
    		a = memoire[ad];
    		break;
    	case 0x48: // @ <- A
    		ad = memoire[pc++]; 
    		memoire[ad] = a; 
    		break;
        case 0xC8: // *@ <- A
    		ad = memoire[pc++];
    		ad = memoire[ad];
    		memoire[ad] = a;
    		break;
    	case 0x49: // @ <- IN
    		printf("Entrez une valeur : ");
    		ad = memoire[pc++];
    		scanf("%i", &memoire[ad]);  
    		break;
    	case 0xC9: // *@ <- IN
    		printf("Entrez une valeur : ");
    		ad = memoire[pc++];
    		ad = memoire[ad];
    		scanf("%i", &memoire[ad]);
    		break;
    	case 0x41: // print @
    		ad = memoire[pc++]; 
    		printf("valeur : %i", memoire[ad]);
    		break;
    	case 0xC1: // print *@
    		ad = memoire[pc++];
    		ad = memoire[ad];
    		printf("valeur : %i", memoire[ad]);
    		break;
    	case 0x10: // PC = @
    		ad = memoire[pc++]; 
    		pc = memoire[ad];
    		break;	
    	case 0x11: // si A<0 PC = @
    		if(A<0)
    			ad = memoire[pc++]; 
    			pc = memoire[ad];
    		break;
    	case 0x12: // si A=0 PC = @
    		if(A==0)
    			ad = memoire[pc++]; 
    			pc = memoire[ad];
    		break;
     
    	}
    }
    quand je lance il me donne ça comme erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    -SVF1521A7EB:~$ gcc -o exo.00 exo.00.c -Wall
    exo.00.c:12:1: error: expected identifier or(’ before ‘forfor (pc = 0; ; )
     ^
    exo.00.c:12:16: error: expected identifier or(’ before ‘)’ token
     for (pc = 0; ; )

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Là, on dirait qu'il te manque carrément des bases du C.
    Tout ce code devrait être mis dans une fonction, probablement une qui prendra le tableau memoire et la valeur initiale du pc en paramètre.

    Et aussi, ce code ne fait pas ce que tu crois qu'il fait:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		if(A<0)
    			ad = memoire[pc++]; 
    			pc = memoire[ad];
    Tu programmes en C, pas en python.
    Pour déterminer ce qui est dans le if, ce n'est pas l'indentation qui décide, mais les accolades:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		if(A<0)
    		{
    			ad = memoire[pc++]; 
    			pc = memoire[ad];
    		}

  7. #7
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 208
    Points : 60
    Points
    60
    Par défaut
    Oui il y a d'autres fonction en bas du code que je n'est pas posté. main ()

    mais l'erreur vient juste de cette partie de for(pc = 0;

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Mais dans le code que tu as posté, le for est en-dehors de toute fonction...

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

Discussions similaires

  1. Lire une requete à partir d'un fichier .sql
    Par forsay1 dans le forum Développement de jobs
    Réponses: 9
    Dernier message: 15/11/2023, 15h40
  2. Lire du texte à partir d'un fichier
    Par naruto523 dans le forum C
    Réponses: 6
    Dernier message: 03/06/2013, 07h57
  3. lire des données à partir d'un fichier texte
    Par Flaherty Mc Coillean dans le forum C
    Réponses: 8
    Dernier message: 15/04/2009, 14h03
  4. Réponses: 2
    Dernier message: 06/02/2008, 15h32
  5. Comment Lire une valeur à partir d'un fichier XML en C++?
    Par Hamdi Hedhili dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 13/12/2005, 10h09

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