Академический Документы
Профессиональный Документы
Культура Документы
Master 1 Informatique
Techniques de compilation
XSPIM : un simulateur graphique du MIPS R2000
Jacques Farr e email : Jacques.Farre@unice.fr
Pipeline
Traitement dune instruction en plusieurs temps
Decode ALU RES
Une instruction nattend pas la n de la pr c dente pour come e mencer a sex cuter ` e Oblige a r ordonner les instruction produites, eventuellement a ` e ` ajouter des nop. Pour a = b + c; d = a + b; i = j + k; add $s1, $s2, $s3 add $s4, $s1, $s2 add $s5, $s6, $s7 avec r ordonnancement e add $s1, $s2, $s3 add $s5, $s6, $s7 add $s4, $s1, $s2 # $s1 pas ecrit
# $s1 ecrit
Slide 1
Slide 2
SPIM
Le cours et les TPs reposeront sur une machine MIPS SPIM est un simulateur du MIPS R2000/R3000 (architecture RISC) Il lit et ex cute des chiers qui contiennent des programmes en e langage dassemblage MIPS Il peut fonctionner en simulant ou non le pipeline Lassembleur d nit des pseudos instructions qui regroupent plue sieurs instructions de base Il contient un d bogueur et un petit syst` me dexploitation (pere e mettant entre autre de faire des entr es-sorties) e
Slide 3
Slide 4
Interface XSPIM
xspim PC = 00000000 Status= 00000000 R0 R1 R2 R3 R4 R5 R6 R7 FP0 FP2 FP4 FP6 (r0) (at) (v0) (v1) (a0) (a1) (a2) (a3) = = = = = = = = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 EPC HI R8 R9 R10 R11 R12 R13 R14 R15 FP8 FP10 FP12 FP14 = 00000000 = 00000000 (t0) (t1) (t2) (t3) (t4) (t5) (t6) (t7) = = = = = = = = Cause = 0000000 BadVaddr = 00000000 LO = 0000000 General Registers 00000000 R16 (s0) = 0000000 R24 (t8) = 00000000 00000000 R17 (s1) = 0000000 R25 (s9) = 00000000 00000000 R18 (s2) = 0000000 R26 (k0) = 00000000 00000000 R19 (s3) = 0000000 R27 (k1) = 00000000 00000000 R20 (s4) = 0000000 R28 (gp) = 00000000 00000000 R21 (s5) = 0000000 R29 (gp) = 00000000 00000000 R22 (s6) = 0000000 R30 (s8) = 00000000 00000000 R23 (s7) = 0000000 R31 (ra) = 00000000 Double Floating Point Registers = 0.000000 FP16 = 0.00000 FP24 = 0.000000 = 0.000000 FP18 = 0.00000 FP26 = 0.000000 = 0.000000 FP20 = 0.00000 FP28 = 0.000000 = 0.000000 FP22 = 0.00000 FP30 = 0.000000 Single Floating Point Registers run help step terminal clear mode set value
Registres
Nom du registre zero at v0-V1 a0-a3 t0-t7 et t8-t9 s0-s7 k0-k1 Num ro e 0 1 2-3 4-7 8-15 et 24-25 16-23 26-27 28 29 30 31 Usage Constante 0 R serv e e R sultats de fonction e Argument 1-4 Temporaire Temporaire R serv pour lOS e e Pointer to global area Stack pointer Frame pointer Addresse de retour
Register Display
Control Buttons
quit print
load breakpt
Text Segments
lw R4, 0(R29) [] addiu R5, R29, 4 [] addiu R6, R5, 4 [] sll R2, R4, 2 addu R6, R6, R2 jal 0x00000000 [] ori R0, R0, 10 [] syscall
Data Segments
[0x10000000]...[0x10010000] 0x00000000 [0x10010004] 0x74706563 0x206e6f69 0x636f2000 [0x10010010] 0x72727563 0x61206465 0x6920646e [0x10010020] 0x000a6465 0x495b2020 0x7265746e [0x10010030] 0x0000205d 0x20200000 0x616e555b [0x10010040] 0x61206465 0x65726464 0x69207373 [0x10010050] 0x642f7473 0x20617461 0x63746566 [0x10010060] 0x555b2020 0x696c616e 0x64656e67 [0x10010070] 0x73736572 0x206e6920 0x726f7473 SPIM Version 3.2 of January 14, 1990
gp sp fp ra
SPIM Messages
Slide 5
Slide 6
Syntaxe de lassembleur
Commentaires : # jusqu` la n de ligne a Sections : .data pour les donn es et .text pour le code e peuvent re m lang es t e e Etiquettes toujours en colonne 1 Exemple : .data item: .word 10 .text .globl main main: lw $t0, item ... # 1 mot initialise a 10 # main toujours global
Pour les variables globales const char* mess = "un message"; int tab[] = {1, 2, 3}; struct S { int a, b, c; } stru; = mess: .asciiz "un message" tab: .word 1, 2, 3 stru: .space 12 Slide 7 Slide 8
lw $t0, 4($fp) lw $t1, _ptr sw $t0, 0($t1) sll $t1, $t0, 2 li $t2, 10 sw $t2,_str+4($t1)
Slide 9
Slide 10
Appels syst` me e
Service print int print oat print double print string read int read oat read double read string sbrk exit Code ($v0) 1 2 3 4 5 6 7 8 9 10 $a0 = buffer, $a1 = length $a0 = amount address (in $v0) Argument(s) $a0 = integer $f12 = oat $f12 = double $a0 = string integer (in $v0) oat (in $f0) double (in $f0) R sultat e
str:
Slide 11
Slide 12
Chargements et rangements
Load Immediate (valeur sign e sur 16 bits) e Load Address Load Word Load Byte Load Double-Word Load Halfword Store Word Store Byte Store Double-Word Store Halfword copie contenu de reg2 dans reg1 la reg, addresse lw reg, addresse lb reg, addresse ld reg, addresse lh reg, addresse sw reg, addresse sb reg, addresse sd reg, addresse sh reg, addresse move reg1, reg2
Slide 13
Slide 14
Instructions de saut
j label jr reg jal label jalr reg beq reg, droit, label bge reg, droit, label bgt reg, droit, label ble reg, droit, label blt reg, droit, label bne reg, droit, label droit : reg ou imm Variantes avec droit = 0 : beqz reg, label, bgez reg, label... Jump Jump Register Jump and Link Jump Reg. and Link Branch on = Branch on Branch on > Branch on Branch on < Branch on = sauvegarde de ladresse de retour dans $ra saut si reg==droit
n $fp de lappelant adresse de retour $sp f(n1) $fp
Exemple de code
int fact (int n) { if (n == 0) return 1; return n * fact (n - 1); }
$fp
$fp $sp
Slide 15
Slide 16
Slide 17
Slide 18