This is an old revision of the document!


TP 12 - WebAssembly

Syntax - forme text

Avant de commencer le TP, lisez le tutoriel suivant: Mozilla Web Assembly Tutorial.

Pour plus d'informations, la documentation de Web Assembly est disponible ici: WebAssembly Specification et Index of Instructions

Utilisation de Web Assembly

Pour tester les exemples présentés dans ce TP, on va utiliser la page destinée a Web Assembly: Web Assembly Studio

Si vous voulez commencer votre travail a partir d'un programme deja créé, vous pouvez accéder a ce lien

Si vous choisissez de créer votre propre projet, tout d'abour vous devez suivre ces étapes:

Sélectionnez l’option Empty Wat Project et appuyez sur Create: tp12-1.jpg

Dans la nouvelle fenetre ouverte, vous pouvez modifier les fichiers qui se trouvent dans le dossier src. Pour la partie JavaScript, vous allez modifier le code source du fichier main.js, en le remplacant comme dans l'exemple suivant : tp12-2.jpg

Dans le fichier main.wat, vous allez trouver le code suivant : tp12-3.jpg

Ici, on a créé une fonction qui réalise l’opération d’addition entre 2 numéros donnés comme paramètres et qui retourne le résultat (la somme). L’appel de cette fonction a été realisé précédemment dans le fichier main.js

Après avoir modifié le contenu d’un fichier, vous devez sauvegarder les changements (Ctrl+S ou le bouton Save).

Pour exécuter le programme, vous devez appuyer sur le bouton Build&Run et le résultat de votre programme sera affiché dans la section Output.

Translation de code en Web Assembly

Program Principal

int main ()
{
  return 0;
}
(module
  (func $start 
    )
  (start $start)
)

Fonction

int sum (int a, int b)
{
}
(module
  (func $sum (param $a i32) (param $b i32) (result i32)
    local.get $a
    local.get $b
    i32.add
    return
    )
)

Attribution de variable local

int name ()
{
  int a;
  a = 0;
  return a;
}
(module
  (func $name (local $a i32) (result i32)
    i32.const 0;
    local.set $a
    local.get $a
    return
    )
)

Import function

(module
  (import "io" "print" (func $print (param $n i32))
  ;; use the print function
  i32.const 120
  call $print 
)

if

if (a>b)
{
   print (a);
}
else
{
   print (b);
}
;; import the print function
local.get $a
local.get $b
i32.gt
if 
   local.get $a
   call $print
else
   local.get $b
   call $print
end

while

a=1;
while (a<120)
{
   print (a);
   a=a+1
}
;; import the print function
i32.const 1
set_local $a
block $endwhile
  loop $while
    local.get $a
    i32.const 120
    i32.gt
    br_if $endwhile
    local.get $a
    call $print 
    local.get $a
    i32.const 1
    i32.add
    local.set $a
    br $while
  end $while
end $endwhile

for

for (i=1; i<120; i++)
{
   print (a);
}
;; import the print function
i32.const 1
local.set $i
block $endfor
  loop $for
    local.get $i
    i32.const 120
    i32.gt
    br_if $endfor
    local.get $i
    call $print 
    local.get $i
    i32.const 1
    i32.add
    local.set $i
    br $for
  end $for
end $endfor

do-while

a=1;
do 
{
   print (a);
   a=a+1
} while (a<=120);
;; import the print function
i32.const 1
local.set $a
loop $dowhile
  local.get $a
  call $print 
  local.get $a
  i32.const 1
  i32.add
  local.set $a
  local.get $a
  i32.const 120
  i32.le
  br_if $dowhile
end $dowhile

Exercises

Pour les exercices suivants, vous pouvez écrire et envoyer le code source dans des fichiers texte. Vous devez ajouter aussi le code WAT, que le code JavaScript. Pour tester la validité de vos programmes, vous devez utiliser wat2wasm.

  1. Ecrivez dans un fichier ex1.txt le code WebAssembly pour le calcul de l'expression 3*(5+6)/7-5.(2p)
  2. Ecrivez un programme qui a une fonction de démarrage start et affiche sur l'écran le mois actuel (numéro). (1p)
  3. Ecrivez un programme qui initialise 3 variables locales avec les valeurs 5, 6 et 3 dans la fonction start et calcule le résultat de l'expression a+b/c. (1p)
  4. Ecrivez un programme avec qui inclut la déclaration d'une fonction qui calcule et affiche le rapport entre 2 numéros donnés comme parametres. Appelez la fonction de division dans la fonction start. (1p)
  5. Ecrivez une fonction qui vérifie si un numéro est divisible par 3. La fonction va afficher sur l'écran le reste de la division x/3. Dans la fonction start, appelez la fonction is_divisible avec le parametre 6. (1p)
  6. Ecrivez une fonction qui affiche sur l'ecran le carré de chaque nombre de l'intervalle [10, 20]. (1p)
  7. Ecrivez une fonction sq_sum qui calcule la somme des racines carrées des nombres d'un intervalle donné. La fonction reçoit deux paramètres qui représentent les limites de l'intervalle et affiche sur l'écran le résultat. Dans la fonction start, appelez la fonction sq_sum avec les parametres 1 et 4. (2p)
  8. Ecrivez une fonction qui vérifie si un nombre est premier et affichez 1 si le nombre est premier et 0 dans le cas contraire. (1p)
alf/laboratoare/12.1588619666.txt.gz · Last modified: 2020/05/04 22:14 by alexandru.radovici
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0