Advertisement
MyPix

VM basic instruction set

Sep 2nd, 2015
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.65 KB | None | 0 0
  1. On pourrait imaginer le code suivant :
  2. int main()
  3. {
  4. float foo = 0.5;
  5. if(4.4 == (1.1*4))
  6. foo = foo*1;
  7. else
  8. foo = foo*2;
  9. print(foo);
  10. return 0;
  11. }
  12. traduit en :
  13. > MEMSIZE STATIC 8 ;Taille de la mémoire statique : 8 Cases
  14. > BEGIN start ;Démarrer à .start
  15.  
  16. .start
  17. fconst 0.5 ;0 est introduit dans le stack
  18. fvar 2A ;Crée une variable vide de type float à l'adresse 42 (2A en hexadécimal)
  19. move 2A ;Déplace la premiere entrée du Stack (d'ou le S) (0.5) à l'adresse 2A
  20. iconst 4 ;4 est introduit dans le stack
  21. fconst 1.1
  22. mul ;Multiplie les 2 premieres entrées du stack (top du stack)*(nombre en dessous), les efface et insère le résultat dans le stack
  23. fconst 4.4
  24. compeq ;Comparateur égal (==), compare les 2 premieres entrées du stack, les effacent , ajoute un nombre 0 ou 1 dans la pile selon le résultat
  25. if branch1 branch2 ;Si le booléen au dessus du stack est vrai, va à branch1, sinon, va à branch2 (Ne touche pas au stack, sauf si il y a un else if style if branch1 branch2 branch3) ou la premiere entrée du stack sera pop pour vérifier la condition suivante
  26. print 2A ;Affiche le contenu de 2A dans la sortie par défaut de la machine, qui devrait être 0.5 vu que branch1 a été exécuté
  27. iconst 0 ;AJoute le code de retour
  28. end ;Termine la machine
  29. .branch1
  30. fload 2A ;Copie 2A dans le stack
  31. iconst 1
  32. mul
  33. move 2A ;Copie le résultat dans 2A
  34. .branch2
  35. fload 2A ;Copie 2A dans le stack
  36. iconst 2
  37. mul
  38. move 2A ;Copie le résultat dans 2A
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement