A compiler for Python subset into assembly language
- File > Project Structure > Librairies > Ajouter
lib/java-cup-11a-runtime.jar
- Clic-droit sur
src
> Mark Directory As... > Source Root - Clic-droit sur
test
> Mark Directory As... > Test Sources - Utiliser Java 17 en JDK
- Créer une Run Configuration pour la classe Main, avec
--debug test.py
en arguments
- Télécharger MinGW32 Installer (minimalistic GNU for Windows) puis installer le compilateur
- Pour maker les tests, utiliser
mingw32-make -f .\Makefile_Windows
- Se connecter en SSH à un ordi de la salle info
- Compiler le code avec
gcc -g -no-pie <fichier.s> -o fichier
- Lancer le code avec GDB en utilisant
gdb ./fichier
method | %rdi | %rsi |
---|---|---|
! (not) | Object caller | |
- (neg) | Object caller | |
+ (add) | Object caller | First argument |
- (sub) | Caller object | First argument |
* (mul) | Caller object | First argument |
/ (div) | Caller object | First argument |
% (mod) | Caller object | First argument |
Pas de call à v.malloc(int)
sauf au début du programme ! Il faut utiliser v.newValue(Type, int)
, qui en plus
d'allouer la mémoire et de setup le type identifier de notre nouvelle valeur, il empile tous les registres caller-saved.
Attention aux registres %rdi et %rsi qui sont souvent utilisés et qui sont bien caller-saved !!
- Un bon compilateur C en ligne pour avoir de l'inspiration pour le code assembly : https://godbolt.org/
- Créer un système qui permet de vérifier formellement qu'il n'y a pas de problèmes d'allocation des registres (genre quand on utilise %r10 ça vérifie au compile time qu'il est pas écrasé plus tard et qu'on a pas fait exprès)
- Tuples python (unchangeable) ou classes