Académique Documents
Professionnel Documents
Culture Documents
Code Assembleur
Processeurs RISC
(Byte code).
Didier Remy
Octobre 2000
http://cristal.inria.fr/remy/poly/compil/1/
http://w3.edu.polytechnique.fr/profs/informatique//Didier.Remy/compil/1/
Informations utiles
La pico-machine decrite dans le livre Le langage Caml de
Pierre Weis et Xavier Leroy.
Le simulateur SPIM du processeur MIPS R2000 est pr esente
succinctement ci-dessous. Voir aussi son manuel de ref
erence
en ligne et en Postscript.
Slide 1
Les processeurs
La m
emoire
2
Les zones m
emoire
Slide 4 Donn
ees dynamiques
Allou
ee dynamiquement
Donn
ees statiques
Modifiable
Texte (programme)
Non
ecrivable
Adresses basses R
eserv
e au syst`
eme
3
Le jeu dinstructions
r nom de registre
n une constante enti`
ere
a absolu (n ou `)
` une
etiquette (adresse)
o erande (r ou a)
op
4
Les appels syst`
emes
5
Pseudo-instructions
add $t0, $t1, 1 addi $8, $9, 1 addition avec une constante
La pico-machine
6
Exemple de programme assembleur
hello.spi
. data
hello : . asciiz hello \n # hello pointe vers hello \n\0
. text
. globl start
start :
Slide 12
li $v0, 4 # la primitive print string
la $a0, hello # a0 l adresse de hello
syscall
if-then-else
Assembleur Mips
Slide 13
blt $t1, $t2, Then # si t1 >= t2 saut `
a Then
move $t3, $t2 # t3 := t1
j End # saut `a Fi
Then: move $t3, $t1 # t3 := t2
End: # suite du programme
7
Boucles
Programme
equivalent Code Mips
While: While:
Slide 14 if t1 <= 0 then goto End ble $t1, $0, End
else
begin
t2 := t2 + t1; add $t2, $t2, $t1
t1 := t1 1; sub $t1, $t1, 1
goto While j While
end;
End: End:
Appel de proc
edure
8
Le programme complet
. data # le tas
nl : . asciiz \n # la chane \n
. text # la z
one code
. globl start
start :
li $a0, 1 # a0 < 1
Slide 16
jal writeln # ra < pc+1; saut `
a writeln
li $a0, 2 # on recommence avec 2
jal writeln
j Exit # saut `
a la fin du programme
writeln :
...
Exit: # fin du programme
Noter la diff
erence entre les instructions j et jal.
Proc
edures r
ecursives
Cest bien s
ur le m
eme code qui est utilise pour fn et fn1 . Il faut
donc sauver avant lappel recursif la valeur des registres qui
seront (ou risque d
etre) modifies par lappel r
ecursif et dont les
valeurs seront encore necessaires (lues) au retour de lappel.
On utilise la pile.
9
La pile
En gen
eral, on alloue et desalloue lespace en pile par blocs pour
plusieurs temporaires `a la fois.
On peut aussi utiliser la pile pour allouer des tableaux si leur
dur
ee de vie le permet.
Conventions dappel
En general :
les arguments sont pass es dans les registres a0 `
a a3 puis dans
la pile.
la ou les valeurs de retour dans v0 et v1.
De m eme :
les registres ti sont sauv es par lappelant (lappel
e peut les
Slide 19
ecraser)
les registres si sont sauv es par lappel
e (qui doit les remettre
dans letat o`
u il les a pris)
Mais ce nest quune convention ! (celle propos e par le fabriquant)
La respecter permet de comminiquer avec dautres programmes
(qui la respectent
egalement).
Choisir une autre convention est possible tant que lon nint
eragit
pas avec le monde exterieur.
10
Exemple : calcul de la factorielle
11
Gestion de lallocation
Le byte-code
Inconvenient : linterpr
etation du byte-code ajoute au moins un
facteur 5 en temps dex ecution (pour de tr`
es bons byte-codes).
12
Exercices
La fonction de Fibonnaci
Slide 24
crire la fonction fib en assembleur MIPS. On pourra commencer
E
par une version simple, inefficace.
crire
E egalement une version optimis ee qui m
emorise les deux
appels precedents dans des registres. On pourra lire lentier au
clavier et limprimer `
a l
ecran.
Pour
eviter les probl`
emes dentr
ee sortie, on
ecrira le programme
`
a compiler sous la forme dun fichier source. Par exemple, pour
13
compiler lexpression ((x * x) + (1 - x * 2)), on
ecrira le source
dans un fichier
arith. ml
open Expression;;
open Arithmetique;;
let e =
Binexp (Plus,
Binexp (Times, X, X),
Slide 26 Binexp (Minus,
Int 1,
Binexp (Times, X, Int 2)))
in compile e;;
On fabriquera un ex
ecutable arith.out par la commande :
ocamlc o arith.out expression . mli arithmetique. ml arith . ml
puis le fichier de code Spim compil
e en lan
cant cette commande
./ arith . out > arith . spi
14
constante, une variable, ou ne contient quune seule op
eration.
Extensions
Cummuler les r esultats auxilliaires, et afficher la somme `
a la
fin.
utiliser les registres au mieux et la pile seulement si n ecessaire.
Slide 28
15