Dans ce TD, nous considérerons les instructions suivantes :
Nmémonic/ For- Opcode/ Opération Nom
syntaxe mat Func Complet
addiu $rt, $rs, imm I 0x9 R[rt]=R[rs]+SignExtImm 1addition non signée avec un immédiat
addu $rd, $rs, $rt R 0x0/0x21 R[rd]=R[rs]+R[rt] addition non signée entre registres
and $rd, $rs, $rt R 0x0/0x24 R[rd]=R[rs] & R[rt] ET bit à bit entre registres
andi $rt, $rs, imm I 0xC R[rt]=R[rs] & ZeroExtImm 2ET bit à bit avec un immédiat
beq $rs, $rt, label I 0x4 if(R[rs]== R[rt]) Branchement si égalité
PC=PC+4+BranchAddr 3
bne $rs, $rt, label I 0x5 if(R[rs] != R[rt]) Branchement si inégalité
PC=PC+4+BranchAddr 3
j label J 0x2 PC = JumpAddr 4Saut inconditionnel
lui $rt, imm I 0xF R[rt] = IM M 16|016 Chargement immédiat haut
lw $rt, imm($rs) I 0x23 R[rt] = chargement registre
mem[R[rs]+SignExtImm 1]
or $rd, $rs, $rt R 0x0/0x25 R[rd] = R[rs] | R[rt] OU bit à bit registre à registre
ori $rt, $rs, imm I 0xD R[rt] = R[rs] | ZeroExtImm 2OU bit à bit avec immédiat
slt $rd, $rs, $rt R 0x0/0x2A R[rd] = (R[rs] < R[rt]) ? 1 : 0 Set Less Than registre à registre
slti $rt, $rs, imm I 0xA R[rt] = Set Less Than avec immédiat
(R[rs] < SignExtImm 1) ? 1 : 0
sll $rd, $rt, sh R 0x0/0x0 R[rd] = R[rt] « SH décalage à gauche
srl $rd, $rt, sh R 0x0/0x2 R[rd] = R[rt] » SH décalage logique à droite
subu $rd, $rs, $rt R 0x0/0x23 R[rd]=R[rs]-R[rt] soustraction non signée entre registres
sw $rt, imm($rs) I 0x2B mem[R[rs]+SignExtImm 1] stockage registre
= R[rt]
1. SignExtImm =IM M 1616
15|IMM 16
2. ZeroExtImm = 016 |IM M 16
3. BranchAddr =IM M1616
15|IMM 16|02
4. JumpAddr = (P C + 4)31···28|IMM 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 En supposant que A est dans le registre R1, traduisez la structure conditionnelle
suivante :
while A /= 0 loop
A:= A -1;
end loop;