Adresse | Contenu |
---|---|
100 | a |
101 | d |
200 | 100 |
202 | b |
XRI | 2 |
LOAD 101, D MUL 201, IND MUL 102, D STORE Y, D LOAD 303, IND MUL 202, D SUB Y, D STORE F, D |
|
Etant donnés les contenus des registres et des mémoires suivants :
(XR1)=1 ; (XR2)=2 ;
(1000)=0 ; (1001)=1 ;
(2000)=2 ; (2001)=3 ;
(3000)=4 ; (3001)=5 ;
(0)=1000
XR1 et XR2 sont des registres d’index. Les valeurs entre parenthèses représentent les adresses mémoire.
Etant donné une machine dont l’architecture est donnée par la figure suivante :
a) | 1/lire A ; 2/ lire B ; 3/ C := A-B ; 4/ R := (A+B)- C ; 5/ écrire R . |
b) | 1/ lire A ; 2/ lire B ; 3/ A := A2 + A*B + B2 ; 4/ Ecrire A. |
La figure ci –après représente un carré de coté C surmonté d’un demi cercle :
La valeur de PI (3.14) se trouve en mémoire centrale,
La valeur de C se trouve dans le périphérique d’entrée.
N’utiliser aucune variable autre que PI et C .
Donner le programme Assembleur équivalent à chacun des programmes C ci-dessous. Vous utiliserez, en plus, la suite des instructions de branchement prédéfinies dans le tableau.
a. | i=0; While ( i < 5 ) { i++; printf("%d",i); } |
Solution |
b. | S=0; for ( i=0;i≤ 3;i++ ) S= S+i; printf("%d",S); |
Solution |
c. | scanf("%d %d %d",&a,&b,&c); if ( a > b && a == c ) { a= a+b; b=c; } else { a= b+c; c=b; } printf("%d %d %d",a,b,c); |
Solution |
d. | scanf("%d",&a); b=0; switch(a) { case 1 : b= a; break; case 2 : b= b+1; case 2 : b= b+3; break; otherwise : b= b+4; } printf("%d",b); |
Solution |
e. | T[0]= 22; T[1]= 14; T[2]= 67 T[3]= T[0]+ T[1]; T[4]= 0; for ( i=0;i≤ 3; i++ ) T[4]= T[4]+T[i]; printf("%d",T[4]); |
Solution |
f. | a=10;b=2;d=6; c= f(a,b); e= f(c,d); printf("%d",e); int f(int x, int y) { return x+y; } |
Solution |
Donner le programme Assembleur qui permet d'afficher la solution d'une équation du premier degré Ax+B = C.
On suppose que A, B, C sont donnés par l'utilisateur et que A ≠ 0.
Donner les cycles d'exécution et les micro-opérations des instructions Assembleur suivantes :
100 STORE 200,D
101 STORE 200,IND
Avec : ACC = 20; @200 = 300; @300 = 40
1. L'instruction Assembleur BP @ permet de rediriger l'exécution du programme à l'instruction d'adresse @ si le contenu de l'accumulateur > 0 (Branch if Positive). Sinon, le programme suit son exécution à l'instruction suivante. Donner les micro-opérations du cycle Exécution correspondantes.
2. Faire la même chose avec :
BN @ : Branchement si ACC < 0
BZ @ : Branchement si ACC = 0
BPZ @ : Branchement si ACC <= 0
BNZ @ : Branchement si ACC <= 0
BR @ : Branchement inconditionnel à @
3. Ecrire un programme Assembleur qui permet d'afficher les valeurs comprises entre 20 et 500 en utilisant l'une des instructions ci-dessus. On peut egalement utiliser l'instruction HALT qui permet d'arrêter l'exécution d'un programme.
Soit le programme assembleur ci-dessous. Donner les étapes d'exécution de chacune de ses instructions.
100 | LOAD 106, D |
101 | MUL 107, IND |
102 | ADD 10, IMM |
103 | TORE 108, D |
104 | LOAD 107, IND |
105 | SUB 109, D |
106 | 2 |
107 | 109 |
108 | 0 |
109 | 4 |
Donner le programme Assembleur qui permet de calculer la factorielle F d'un nombre naturel N. Pour rappel, la factorielle d'un nombre est calculée comme suit :
F = N ! = N * (N-1) * (N-2) * .... * 2 * 1 pour N >= 1. Si N=0, 0 ! = 1.