diff --git a/mars_main.c b/mars_main.c index 8c695d3..cea8cd0 100644 --- a/mars_main.c +++ b/mars_main.c @@ -11,7 +11,7 @@ void initialiser_memoire(){ int calculer_position(); /* Va permettre de calculer la position à laquelle le programme doit effectuer une action*/ -void execute_instruction(union mars_instruction instruction, int player, struct adresse memoire[8000], int position[2]){ +void execute_instruction(union mars_instruction instruction, int player, struct adresse memoire[TAILLE_MEM], int position[2]){ short int operation = instruction.instruct.codeOp; /* Pour rendre le code un peu plus lisible */ switch (operation){ @@ -22,6 +22,15 @@ void execute_instruction(union mars_instruction instruction, int player, struct case SUB: case JMP: + short int modeadresse = instruction.instruct.modeAddrA; + + if (modeadresse == IMMEDIAT){ + position[player] = (instruction.instruct.ArgA + TAILLE_MEM) % TAILLE_MEM; + } else if (modeadresse == DIRECT) { + position[player] += (instruction.instruct.ArgA + TAILLE_MEM) % TAILLE_MEM; + } else if (modeadresse == INDIRECT){ + /* Lire contenu mémoire à l'adresse demandée (DAT) puis aller à position actuelle + num contenu dans l'adresse relative */ + } case DJZ: diff --git a/mars_types.h b/mars_types.h index d38c8e9..3593a19 100644 --- a/mars_types.h +++ b/mars_types.h @@ -22,5 +22,6 @@ union mars_instruction { /* Listes des opérations possibles */ enum liste_operations {DAT, MOV, ADD, SUB, JMP, JMZ, JMG, DJZ, CMP}; +enum modes_adressage {IMMEDIAT, DIRECT, INDIRECT}; #endif \ No newline at end of file