|
Postscript, PDF | Didier Rémy | Polytechnique, INRIA |
|
· | La pico-machine décrite dans le livre Le langage Caml de Pierre Weis et Xavier Leroy. |
· | Le simulateur SPIM du processeur MIPS R2000 est présenté succinctement ci-dessous. Voir aussi son manuel de référence en ligne et en Postscript. |
|
· | Les (vieux) processeurs CISC (Complex Instruction Set)
| ||||
· | Les (nouveaux) processeurs RISC (Reduced Instruction Set)
|
|
|
|
|
· | le registre zero qui vaut toujours 0, même après une écriture. |
· | Le registre ra, utilisé implicitement par certaines instructions pour sauver l'adresse de retour avant un saut. |
· | passage (a0, ... a3) et retour (v0, v1) des arguments; |
· | registres temporaires sauvegardés (s0, .. s7) ou non (t0, ... t9) par les appels de fonction. |
· | pointeurs de pile sp, fp ou de donnée gp; |
· | réservés par l'assembleur at et le système k0, k1. |
|
|
|
|
· | add r1, r2, o qui place dans r1 la valeur
r2 + o.
|
· | lw r1, n (r2) place dans r1 le mot contenu à
l'adresse r2 + n.
|
· | sw r1, n (r2) place r1 dans le mot contenu à
l'adresse r2 + n.
|
· | bne r, a, l saute à l'adresse l si r et a
sont différents,
|
· | jal o qui sauve pc+1 dans ra et saute à l'étiquette o.
|
|
|
|
|
|
|
|
% spim -notrap -file hello.spi)et regarder dans la zône
Text Segments
.
Code MIPS | Pico code | signification |
nom r1, o, r2 | nom r2, o, r1 | r1 ¬ o nom r2 |
|
|
|
__start
. -
notrap
, le chargeur ajoute un prélude
qui se branche à l'étiquette main
(remplacer alors
__start
par main
).
|
|
|
|
|
Programme équivalent
|
Code Mips
|
|
$ra
, pour revenir après l'appel.$ra
.writeln
qui imprime un entier
puis un retour à la ligne.
|
|
|
jal
.
|
fn |
ì ï ï í ï ï î |
|
|
|
|
|
· | les arguments sont passés dans les registres a0 à a3 puis dans la pile. |
· | la ou les valeurs de retour dans v0 et v1. |
· | les registres ti sont sauvés par l'appelant (l'appelé peut les écraser) |
· | les registres si sont sauvés par l'appelé (qui doit les remettre dans l'état où il les a pris) |
|
|
|
|
|
|
|
|
Le jeu d'instructions Spim est décrit briévement dans le cours. La consultation ponctuelle du jeu d'instruction détaillé est probablement nécessaire. |
fib
en assembleur MIPS.
On pourra commencer par une version simple, inefficace.
|
((x * x) + (1 - x * 2))
, on écrira le source dans un fichier
|
ocamlc -o arith.out expression.mli arithmetique.ml arith.ml |
./arith.out > arith.spi |
spim -notrap -file arith.spi |
compile
:
epxressions
->
unit
qui imprime
dans la sortie standard le code spim correspondant à l'évaluattion de
l'expression reçue en argument.· | on effectue toutes les opérations dans les registres a1 et a2. |
· | on utilise le registre a3 pour la valeur de la variable, et |
· | on sauve les arguments dans la pile lors d'un calcul auxiliaire. |
· | Commencer par une version de la fonction compile qui ne traire que les cas simples, ie. où l'expression arithmétique et une constante, une variable, ou ne contient qu'une seule opération. |
· | Cummuler les résultats auxilliaires, et afficher la somme à la fin. | |
· | utiliser les registres au mieux et la pile seulement si nécessaire.
|
This document was translated from LATEX by HEVEA and HACHA.