| 
| 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.