Le Brainfuck est un langage de programmation ne comportant que 8 instructions, impliquant une difficulté de compréhension et d’écriture dont le langage tire son nom.

J’ai choisi d’entamer un nouveau projet : la réalisation d’un compilateur Brainfuck pour architecture x86.
L’objectif de ce projet est de me permettre de mieux appréhender le fonctionnement des assembleurs, et de découvrir le format standard pour les exécutables UNIX : elf.

Dans un premier temps, je vais coder en assembleur les parties de code qui seront communes à tout programme Brainfuck (ce que j’appellerais maintenant la base) :

  • l’allocation du tableau
  • les procédures pour déplacer le pointeur et modifier les valeurs du tableau

Je vais ensuite devoir écrire un programme capable de traduire le Brainfuck en un langage intermédiaire qui sera linéaire, puis en langage binaire. Grâce à la base, je ne devrais avoir à utiliser que des appels (vers les fonctions de la base) et des sauts conditionnels, ce qui simplifiera grandement la transcription en binaire.

Je vais rencontrer deux difficultés :

  • linéariser les instructions [ et ] du brainfuck
  • réussir à comprendre la doc Intel pour transcrire CALL et JE

Let’s code.