Le but de ce TP est de comprendre les principes de la programmation assembleur, avec un langage simplifié.
Core War est un jeu où plusieurs programmes (virus) tournent simultanément sur une machine virtuelle. Le but est de faire se terminer tous les autres programmes. Cf. Beginner's guide, FAQ et autres références.
On n'utilisera pas les 18 ou 19 instructions de l'assembleur Redcode,
mais seulement les 6 ci-dessous et les modes d'adressage
immédiat, direct et B-indirect :
MOV, ADD, JMP, CMP, SLT, DAT.
NB : l'adressage immédiat signifie que la valeur considérée
est celle de l'argument de l'instruction, l'adressage direct signifie que
la valeur considérée celle à l'adresse (relative) donnée par l'argument
de l'instruction, l'adressage indirect signifie que la valeur considérée
celle à l'adresse donnée par ce qui est à l'adresse donnée par l'argument
de l'instruction.
Exemple de corrigé
à utiliser avec les codes de Imp
et Dwarf
et aussi un code plus compliqué.
Dans les règles standardisées de Core War, il y a un scheduler qui exécute successivement une instruction de chaque programme. On va programmer ici une version modifiée de la machine virtuelle MARS, où chaque programme utilise un processus Unix et où la concurrence entre ces programmes est gérée par le scheduler Unix. La mémoire de la machine virtuelle est donc de la mémoire partagée entre ces processus.
Exemple de corrigé
Plus complet (avec gestion des signaux)
Exemple de corrigé, avec utilisation de nanosleep