TD 12 : Programmation en langage machine MIPS L’objectif de ce TD est de comprendre comment mettre en œuvre un algorithme sur un processeur. Le processeur utilisé pour ce TD est le processeur MIPS, déjà présenté en cours et que vous utiliserez en TP et concevrez dans le module CEP au second semestre. Les registres et les bus du processeur MIPS considéré sont tous sur 32 bits et le registre R0 est cablé à zéro. On rappelle l’architecture globale du processeur et sa liaison avec la mémoire : Le MIPS a un jeu d’instructions à 3 opérandes et ses instructions sont réparties dans 3 formats différents : 31 2625 2120 1615 Format R : opcode RS RT Format I : opcode RS RT Format J : opcode 1110 RD 65 SH IMM16 IMM26 0 FUNC Dans ce TD, nous considérerons les instructions suivantes : Nmémonic/ syntaxe addiu $rt, $rs, imm addu $rd, $rs, $rt and $rd, $rs, $rt andi $rt, $rs, imm beq $rs, $rt, label Format I R R I I Opcode/ Func 0x9 0x0/0x21 0x0/0x24 0xC 0x4 bne $rs, $rt, label I 0x5 j label lui $rt, imm lw $rt, imm($rs) J I I 0x2 0xF 0x23 or $rd, $rs, $rt ori $rt, $rs, imm slt $rd, $rs, $rt slti $rt, $rs, imm R I R I 0x0/0x25 0xD 0x0/0x2A 0xA sll $rd, $rt, sh srl $rd, $rt, sh subu $rd, $rs, $rt sw $rt, imm($rs) R R R I 0x0/0x0 0x0/0x2 0x0/0x23 0x2B 1. 2. 3. 4. Opération R[rt]=R[rs]+SignExtImm 1 R[rd]=R[rs]+R[rt] R[rd]=R[rs] & R[rt] R[rt]=R[rs] & ZeroExtImm 2 if(R[rs]== R[rt]) PC=PC+4+BranchAddr 3 if(R[rs] != R[rt]) PC=PC+4+BranchAddr 3 PC = JumpAddr 4 R[rt] = IM M 16|016 R[rt] = mem[R[rs]+SignExtImm 1 ] R[rd] = R[rs] | R[rt] R[rt] = R[rs] | ZeroExtImm 2 R[rd] = (R[rs] < R[rt]) ? 1 : 0 R[rt] = (R[rs] < SignExtImm 1 ) ? 1 : 0 R[rd] = R[rt] « SH R[rd] = R[rt] » SH R[rd]=R[rs]-R[rt] mem[R[rs]+SignExtImm 1 ] = R[rt] Nom Complet addition non signée avec un immédiat addition non signée entre registres ET bit à bit entre registres ET bit à bit avec un immédiat Branchement si égalité Branchement si inégalité Saut inconditionnel Chargement immédiat haut chargement registre OU bit à bit registre à registre OU bit à bit avec immédiat Set Less Than registre à registre Set Less Than avec immédiat décalage à gauche décalage logique à droite soustraction non signée entre registres stockage registre SignExtImm = IM M 1616 15 |IM M 16 ZeroExtImm = 016 |IM M 16 2 BranchAddr = IM M 1616 15 |IM M 16|0 JumpAddr = (P C + 4)31···28 |IM M 26|02 Préparation Ex. 1 : Interprétation d’instructions Question 1 Traduire en langage machine les instructions MIPS suivantes : andi $5, $24, 0xFF subu $16, $8, $4 Interpréter les mots de 32 bits suivant comme des instructions MIPS : 0x8CE3000C 0x000FF9C0 Ex. 2 : Implantations basiques Question 1 Comment peut on charger un immédiat de 32 bits dans un registre utilisateur ? Question 2 suivante : En supposant que A est dans le registre R1, traduisez la structure conditionnelle while A /= 0 loop A:= A -1; end loop; Question 3 Donnez les valeurs des champs IMM des instructions de branchement utilisées en supposant que votre programme commence à l’adresse 0x80. Question 4 En supposant que A et B sont des variables 32 bits non signées situées dans la mémoire aux adresses 0x1000 et 0x1004, traduisez la structure conditionnelle suivante : if A < B then A := 1023; else A := 511; end if; Ex. 3 : Implantation du PGCD en assembleur MIPS Question 1 En supposant que A0 et B0 sont des valeurs 32 bits non signées qui ont été situées dans la mémoire aux adresses 0x1000 et 0x1004, traduisez l’algorithme PGCD ci-dessous. Le résultat sera mis à l’adresse 0x1008. procedure PGCD is A, B: Positive; begin Get(A); -- A :=A0 Get(B); -- B :=B0 while A /= B loop if A < B then B := B - A; else A := A - B; end if; end loop; Put(B); end; Pour aller plus loin... Question 2 Transcrire le programme ci-dessus en langage machine en hexadé- cimal. Pour aller plus loin... Ex. 4 : Comparaison processeur/circuit dédié Question 1 Comparer le nombre de cycle nécessaire à l’implantation processeur pour exécuter cet algorithme pgcd à celui de l’implantation du TD8 en supposant que le processeur met 3 cycles pour exécuter une instruction. A votre avis, lequel de ces 2 circuits nécessitent le plus de ressources ? Quel avantage a le processeur sur le circuit dédié ?