Logiciels Libres et Systèmes Embarqués


8. Invocation

Voila, nous avons fait le tour d'horizon de ce fabuleux langage nommé... euh... En fait c'est un langage sans nom :) !

En ce qui concerne le compilateur, voila une liste des options qu'il gère :

  • -s spécifie le nom du fichier source
  • -d spécifie le nom du fichier de destination
  • -v affiche l'allocation de registre et les contextes
  • -g enregistre dans le fichier source le code source en commentaire
  • -t n'enregistre pas dans le fichier source les commentaires d'origine
  • -h devinez ;) !

Amusez-vous à compiler l'aide tutoriel en faisant :

bash# ./r3kcompiler -h
bash# ./r3kcompiler -s tutorial.code -d tutorial.asm -g -t

Vous trouverez dans tutorial.asm le code assembleur de ce tutoriel :

//  iterator = 1
addi R1,R0,1

//  temp1 = 2
addi R2,R0,2

//  temp2 = 0
addi R3,R0,0

//  temp3 = 5
addi R4,R0,5

//  temp2 = temp1 + 2
addi R3,R2,2

//  temp1 = temp3 + temp2
add R2,R4,R3

//  temp3 = 3 - temp1
addi R4,R2,-3
sub R4,R0,R4

//  temp2 = temp2 & temp2
and R3,R3,R3

//  temp3 = temp1 | 0
ori R4,R2,0

//  temp1 = temp1 << 1
lsl R2,R2,1

//  temp1 = 2 >> temp3
lsr R2,R4,2

//  temp1 = 0 <| temp2
slti R2,R3,0
xori R2,R2,1

//  temp3 = temp1
add R4,R0,R2

//  temp2 = temp1 nor temp2
nor R3,R2,R3

//  temp1 = temp2 xor temp3
xor R2,R3,R4

//  mem[10,temp2] = temp1
sw R2,10(R3)

//  temp3 = mem[21,temp1]
lw R4,21(R2)

//  for iterator from 0 to 100 step 2 do
addi R1,R0,0
:for_0
addi R5,R1,-100
bgtz R5,:end_for_0
addi R1,R1,2

//  endfor
j :for_0
:end_for_0

//  while temp1 >= temp2 do
:while_0
sub R5,R2,R3
bltz R5,:end_while_0

//  endwhile
j :while_0
:end_while_0

//  for iterator from 0 to 100 step 2 do
addi R1,R0,0
:for_1
addi R5,R1,-100
bgtz R5,:end_for_1
addi R1,R1,2

//          break
j :end_for_1

//  endfor
j :for_1
:end_for_1

//  while temp1 >= temp2 do
:while_1
sub R5,R2,R3
bltz R5,:end_while_1

//          continue
j :while_1
//  endwhile
j :while_1
:end_while_1

//  if temp1 != temp3 then
beq R4,R2,:end_then_0

//  endif
:end_then_0

//  if temp1 < temp3 then
sub R5,R2,R4
bgez R5,:end_then_1

//  else
j :end_else_1
:end_then_1

//  endif
:end_else_1

//  free iterator

//  label pas_beau
:pas_beau

//  goto pas_beau
j :pas_beau

//  goto $temp1
jr R2

Il ne reste plus qu'à l'assembler avec votre assembleur favoris (mais ce code risque de ne pas faire grand chose d'utile !).

Merci de votre lecture (je crois n'avoir rien oublié) !