Вы находитесь на странице: 1из 10

D partement dInformatique e

Universit de Nice Sophia Antipolis e

Master 1 Informatique

Techniques de compilation
XSPIM : un simulateur graphique du MIPS R2000
Jacques Farr e email : Jacques.Farre@unice.fr

Architectures CISC et RISC


CISC : jeu dinstruction complexe (machines avant 85, Pentium...) beaucoup dinstructions, peu orthogonales, de taille variable op rations entre registres et m moire e e assez peu de registres RISC : jeu dinstruction r duit (Mips, Sparc, Alpha...) e peu dinstructions, assez orthogonales, de taille xe en g n ral e e op rations entre registres uniquement e registres relativement nombreux Les deux architectures autorisent un pipeline des instructions
Fetch

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

Architecture MIPS R2000/R3000


Architecture simple et r guli` re e e 32 registres g n raux (32 bits) e e Jeu dinstructions simple et orthogonal op ration logiques et arithm tiques entre registres uniquement e e Modes dadressages simples mais puissants chargement et rangement de la m moire dans un registre (32 e bits) ou un couple de registres (64 bits) Co-processeur ottant (32 registres de 32 bits, regroupables en 16 registres de 64 bits)

Slide 3

Slide 4

Techniques de compilation . XSPIM

UNSA janvier 2006 c J. Farr e

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

= 0.000000 = 0.000000 = 0.000000 = 0.000000

Control Buttons

quit print

load breakpt

Text Segments

User and Kernel Text Segments

[0x00400000] [0x00400004] [0x00400008] [0x0040000c] [0x00400010] [0x00400014] [0x00400018] [0x0040001c]

0x8fa40000 0x27a50004 0x24a60004 0x00041090 0x00c23021 0x0c000000 0x3402000a 0x0000000c

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

Data and Stack Segments

0x726f6e67 0x74707572 0x6e67696c 0x6e69206e 0x00205d68 0x64646120 0x00205d65

gp sp fp ra

SPIM Messages

Slide 5

Slide 6

Techniques de compilation . XSPIM

UNSA janvier 2006 c J. Farr e

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

Principales instructions de d claration e


.asciiz une chaine .byte 3, 25, 12 .word 55, 3000 .space 100 d claration de chane termin e par 0 e e d claration et initialisation doctets e d claration et initialisation dentiers (32 bits) e r servation de 100 octets (non initialis s) e e

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

Techniques de compilation . XSPIM

UNSA janvier 2006 c J. Farr e

Modes dadressage (en assembleur)


Lunit dadressage est loctet et les adresses doivent etre alignes e e Format (reg) imm imm (reg) sym sym imm sym imm (registre) immediat immediat + contenu du registre addresse du symbole addresse du symbol immediat addresse du symbole (immediat + contenu du registre) En fait, un seul mode dadressage : d placement(registre) e = R sultat e contenu du registre

Exemples dutilisation des modes dadressage


int* ptr; struct S { int a; int b[10]; } str; void F (int j, int i) { *ptr = i; str.b[i] = 10; }

lw $t0, 4($fp) lw $t1, _ptr sw $t0, 0($t1) sll $t1, $t0, 2 li $t2, 10 sw $t2,_str+4($t1)

# charger i # charger ptr # *ptr = i # i * 4 # 10 # str.b[i]=10

Slide 9

Slide 10

Techniques de compilation . XSPIM

UNSA janvier 2006 c J. Farr e

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

Exemple dappel syst` me e


.data .asciiz "the answer = " .text li $v0, 4 # system call code for print_str la $a0, str # address of string to print syscall # print the string li $v0, 1 li $a0, 5 syscall # system call code for print_int # integer to print # print it

str:

Afche the answer = 5

Slide 11

Slide 12

Techniques de compilation . XSPIM

UNSA janvier 2006 c J. Farr e

Quelques instructions arithm tiques et logiques e


instruction add R, G, D sub R, G, D mul R, G, D div R, G, D rem R, G, D and R, G, D or R, G, D xor R, G, D sll R, G, D srl R, G, D effet R=G+D R=G-D R=G*D R=G/D R=G%D R=G&D R=G|D R = GD R = G << D R = G >> D not R, O R = O instruction abs R, O neg R, O effet R = |O| R = -O li reg, imm

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

R, O et G sont des registres, D un registre ou une valeur sign e sur 16 bits e

ou adresse est un mode dadressage `

Slide 13

Slide 14

Techniques de compilation . XSPIM

UNSA janvier 2006 c J. Farr e

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); }

n $fp de lappelant adresse de retour n1

$fp

n $fp de lappelant adresse de retour

$sp prologue de fact

n1 $fp de lappelant adresse de retour

$fp $sp

Slide 15

Slide 16

Techniques de compilation . XSPIM

UNSA janvier 2006 c J. Farr e

Exemple de code - suite


.text .globl _fact # prologue fact _fact: sw $ra, -8($sp) sw $fp, -4($sp) move $fp, $sp sub $sp, $sp, 8 # corps proprement dit (transparent suivant) # epilogue fact _L2: lw $ra, -8($fp) move $sp, $fp lw $fp, -4($fp) jr $ra

Exemple de code - suite


# corps proprement dit (transparent suivant) lw $a0, 0($fp) # charger n en registre bne $a0, $zero, _L1 # if (n == 0) then li $v0, 1 # return 1 j _L2 _L1: sub $sp, $sp, 4 lw $a0, 0($fp) # charger n (encore) sub $t0, $a0, 1 # passer argument n - 1 sw $t0, 0($sp) jal _fact # appeler fact add $sp, $sp, 4 lw $a0, 0($fp) # charger n (encore !!!) mul $v0, $a0, $v0 # return n * fact (n - 1)

Slide 17

Slide 18

Techniques de compilation . XSPIM

UNSA janvier 2006 c J. Farr e

Вам также может понравиться