Exercice 2 1°) Traduire en assembleur le fragment de programme ci-dessous : int int_v1; // codé sur 8 bits à l'adresse 100h int int_v2; // codé sur 8 bits à l'adresse 101h int int_v3; // codé sur 8 bits à l'adresse 102h int_v3 = int_v1 + int_v2; ;// Correction : LD A , (100h) ; A <- int_v1 LD B , A ; B <- int_v1 LD A , (101h) ; A <- int_v1 ADD A , B ; A <- A + B LD (102h),A ; int_v3 <- A 2°) Répéter la question précédence avec l'hypothèse suivante : int int_v1; // codé sur 16 bits à l'adresse 100h-101h int int_v2; // codé sur 16 bits à l'adresse 102h-103h int int_v3; // codé sur 16 bits à l'adresse 104h-105h int_v3 = int_v1 + int_v2 ;// Correction : ATTENTION les bits de poids le plus faible se trouvent dans la première case mémoire ;Addition des bits de poids le plus faible LD A , (100h) LD B , A LD A , (102h) ADD A , B LD (104h) , A ;ADdition des bits de poids le plus fort en tenant compte de la retenue LD A , (101h) LD B , A LD A , (103h) ADC A , B LD (105h) , A 3°) Traduire le fragment de code suivant en assembleur. Les 5 éléments du tableau t sont codés sur 8 bits consécutivement à partir de l'adresse 100h. int* int_t; // un tableau de 4 entiers stockés à l'adresse 100h int int_i; // 8 bits for(int_i = 0 , int_i < 4 , int_i ++ ){ int_t[int_i] = 0 ; } ; Correction LD HL , 100h ; On met dans HL l'adresse de la première case du tableau LD B , 0 ; B va servir de compteur initialisé à 0 Boucle: LD (HL) , 0 ; On met dans l'adresse qui se trouve dans HL la valeur 0 INC HL ; On incrémente l'adresse qui se trouve dans HL INC B ; On incrémente le compteur LD A , 4 ; A va servir de condition d'arrêt et on s'arrête quand B = 4 CP B ; Compare B et A JR NZ,Boucle ; on retourne dans la boucle si Not Z 4°) Meme question avec le fragment de code suivant int* int_t1 ; // un tableau de 4 entiers stocké à l'adresse 100h int* int_t2 ; // un tableau de 4 entiers stocké à l'adresse 105h int int_i ; // 8 bits for(int_i = 0 , int_i < 4 , int_i ++ ){ int_t2[int_i] = int_t1[int_i] ; } ; Correction LD IX , 100h ; On met dans IX l'adresse de la première case du premier tableau LD HL , 105h ; On met dans HL l'adresse de la première case du second tableau LD B , 0 ; B va servir de compteur initialisé à 0 Boucle: LD A , (IX) ; On met dans l'accumulateur le contenu de l'adresse de la ieme case du premier tableau LD (HL) , A ; On met dans l'adresse qui se trouve dans HL la valeur qui est dans A INC IX ; On incrémente l'adresse qui se trouve dans IX INC HL ; On incrémente l'adresse qui se trouve dans HL INC B ; On incrémente le compteur LD A , 4 ; A va servir de condition d'arrêt et on s'arrête quand B = 4 CP B ; Compare B et A JR NZ,Boucle ; on retourne dans la boucle si Not Z 5°) Meme question avec le fragment de code suivant int* int_t1 ; // un tableau de 4 entiers stocké à l'adresse 100h int* int_t2 ; // un tableau de 4 entiers stocké à l'adresse 105h int* int_t3 ; // un tableau de 4 entiers stocké à l'adresse 10Ah int int_i ; // 8 bits for(int_i = 0 , int_i < 4 , int_i ++ ){ int_t3[int_i] = int_t1[int_i] + int_t2[int_i]; } ; Correction LD IX , 100h ; On met dans IX l'adresse de la première case du premier tableau LD IY , 105h ; On met dans IY l'adresse de la première case du second tableau LD HL , 10Ah ; On met dans HL l'adresse de la première case du troisième tableau LD B , 0 ; B va servir de compteur initialisé à 0 Boucle: LD A , (IX) ; On met dans l'accumulateur le contenu de l'adresse de la ieme case du premier tableau ADD A , (IY) ; On ajoute à l'accumulateur le contenu de l'adresse de la ieme case du second tableau LD (HL) , A ; On met dans l'adresse qui se trouve dans HL la valeur qui est dans A INC IX ; On incrémente l'adresse qui se trouve dans IX INC IY ; On incrémente l'adresse qui se trouve dans IY INC HL ; On incrémente l'adresse qui se trouve dans HL INC B ; On incrémente le compteur LD A , 4 ; A va servir de condition d'arrêt et on s'arrête quand B = 4 CP B ; Compare B et A JR NZ,Boucle ; on retourne dans la boucle si Not Z 6°) Traduire le fragment de code suivant en assembleur (Algorithme d'euclide) LD B , 21 ; On met 21 dans B LD C , 35 ; On met 35 dans C BOUCLE: LD A , B CP C JR Z, FIN ; Si B != C on continnue, sinon on va au DRAPEAU FIN LD A , B CP C JR C, SINON ; Si B > C on continue dans ALORS sinon on va au DRAPEAU SINON ALORS : LD A , B SUB C ; A = A - C LD B , A JR FINSI ; on va au DRAPEAU FINSI SINON : LD A , C SUB B ; A = A - B LD C , A FINSI : JR BOUCLE ; on retourne au début de la boucle FIN: