- Installer gcc et make
make all
./sdc_main [FICHIER_ASM] [TAILLE_MEMOIRE]
- La taille mémoire doit-etre suffisante pour accomoder les variables et instructions du programme.
- Une instruction vaut une case, une variable simple vaut une aussi et pour tableau il s'agit de la taille du tableau
- Makefile: Comporte les différentes cibles pour les tests et le programme final
- cpu.c/cpu.h: Contient les fonctions relatives au CPU
- exemple.asm: Le fichier ASM pour tester toute les instructions
- hash.c/hash.h: Implémentation de table de hachage générique
- main.c: Interface utilisateur (voir guide ci-dessous)
- memory.c/memory.h: Fonctions relatives à la gestion des segments de mémoire
- parser.cparser.h: Analyse et traitement des fichiers ASM
- perf_boucle.asm: Fichier test ASM pour la vitesse du CPU
- perf_compile.asm: Fichier test ASM pour la vitesse du parser
- test_cpu.c/test_cpu2.c/test_cpu3.c: Test progressif des différentes fonctionalités du CPU
- test_es_segment.c: Test de la fonctionalité du extra segment
- test_hash.c: Test de la table de hachage
- test_mem.c: Test du gestionnaire de segments
- test_parser.c: Test du parser
- test_perf_cpu.c: Test de la performance du CPU
- test_perf_parser.c: Test de la performance du parser
| Registre | Description |
|---|---|
| AX | Registre général A |
| BX | Registre général B |
| CX | Registre général C |
| DX | Registre général D |
| IP | Pointeur d'instruction (index du code) |
| ZF | Drapeau Zéro (vaut 1 si le résultat est zéro) |
| SF | Drapeau Signe (vaut 1 si le résultat est négatif) |
| SP | Pointeur de pile |
| BP | Pointeur de base (base de la pile) |
| ES | Segment supplémentaire (allocation dynamique) |
| Segment | Usage |
|---|---|
| CS | Segment de code (instructions) |
| DS | Segment de données (variables globales) |
| SS | Segment de pile (pile locale) |
| ES | Segment supplémentaire (tas / dynamique) |
| Mnémonique | Description |
|---|---|
| MOV dst, src | Copie la valeur de src vers dst |
| ADD dst, src | Ajoute src à dst |
| CMP dst, src | Compare dst et src, met à jour ZF/SF |
| JMP addr | Saut inconditionnel vers l’adresse addr |
| JZ addr | Saut vers addr si ZF == 1 |
| JNZ addr | Saut vers addr si ZF == 0 |
| HALT | Arrête l’exécution |
| PUSH val | Empile une valeur sur la pile |
| POP reg | Dépile la pile dans un registre |
| ALLOC | Alloue un segment mémoire dans ES (taille = AX, stratégie* = BX) |
| FREE | Libère le segment ES |
- *Stratégie 0 opte pour le premier segment convenable, 1 pour celui avec la taille la plus proche et 2 la taille la plus grande
42 – Valeur immédiate
AX, BX, etc. – Accès direct à un registre
[5] – Accès direct à une adresse mémoire dans DS
[AX] – Accès indirect via registre (index dans DS)
[DS:AX], [SS:BX] – Préfixe de segment (accès mémoire via un segment spécifique)