Bonjour,

Je suis en train de créer une machine virtuelle capable entre autre de faire linstruction suivante
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
Instruction add : Reg[dest]<=Reg[rn]+Reg[valeurS] si imm=0
                        Reg[dest]<=Reg[rn]+valeurS      si imm=1
Le bit Z est mis à 1 Reg[dest] est nul
Le bit C est mis à 1 si il ya une retenue que je ne sais pas comment y traiter.
Le bit N est mis à 1 si Reg[dest] a un signe positif.

Je crois que mon problème réside dans le fait que je ne sais pas comment affecter à chacun des Reg[i] (tel que 0<=i<=32) (2048*i) ème cases de la mémoire (Mem[] dans mon programme). Par exemple pour Reg[0] je veux lui affecter le premier cases de Mem[65536] pour qu'elle puisse parcourir jusqu'à Mem[2047]. Pouvez vous m'aider? Merci d'avance

D'abord commençons par les variables globales:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
int Reg[32];
char Mem[65536];
int Z=0;
int C=0;
int N=0;
Et maintenant la fonction add:
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
 
int add(int dest, int rn,int imm, int valeurS){
    int tmp=0;
    if(dest!=0){
        if(imm=0 && valeurS<=31){
            Reg[dest]=Reg[rn]+Reg[valeurS];
        }else if (imm=1){
            Reg[dest]=Reg[rn]+valeurS;
        }
    }else{
        tmp=Reg[rn]+valeurS;
        return tmp;
    }
    if (Reg[dest]==0){
        Z=1;
    }else{
        Z=0;
    }
    if(Reg[dest]<0){
        N=1;
    }else{
        N=0;
    }
    return Reg[dest];
}