[corewar]C/unix

Fermé
fredo10 Messages postés 31 Date d'inscription vendredi 25 novembre 2005 Statut Membre Dernière intervention 4 février 2006 - 6 déc. 2005 à 19:43
 La pelle - 31 janv. 2014 à 15:34
salut a tous ,
j'ai besoin d'aide pour recoder le corewar, pour ceux qui connaissent ce jeu la.voila j'ai pratiquement terminerla machine virtuelle et il me faut recoder les instructions que cette machine virtuelle va interpreter lorsqu'elle recevra des joeurs ces instructions.ce sont les suivantes:
0x01 (live) : Suivie de 4 octets qui représente le numéro du joueur.
Cette instruction indique que ce joueur est en vie.
(pas d'octet de codage des paramètres).
0x02 (ld) : Cette instruction prend 2 paramètres le deuxième est forcement un registre (pas le PC).
Elle load la valeur du premier paramètre dans le registre.
Cette opération modifie le carry.
ld 34,r3 charge les REG_SIZE octets a partir de l'adresse (PC + (34 % IDX_MOD)) dans le registre r3.
0x03 (st) : Cette instruction prend 2 paramètres.
Elle store (REG_SIZE OCTET)la valeur du premier argument (toujours un registre) dans le second.
st r4,34 store la valeur de r4 a l'adresse ( PC + (34 % IDX_MOD))
st r3,r8 copie r3 dans r8
0x04 (add) : Cette instruction prend 3 registres en paramètre, additionne le contenu des 2 premiers et met le résultat dans le troisième.
Cette opération modifie le carry.
add r2,r3,r5 additionne r2 et r3 et mets le résultat dans r5
0x05 (sub) : même que add mais soustrait
0x06 (and) : p1 & p2 -> p3 le paramètre 3 et toujours un registre.
Cette opération modifie le carry.
and r2,%0,r3 met r2 & 0 dans r3
0x07 (or) : même que and mais avec le ou ( | du c).
0x08 (xor) : même que and mais avec le ou exclusif (^ du c).
0x09 (zjmp) : Cette instruction n'est pas suivie d'octet pour décrire les paramètres.
Elle prend toujours un index (IND_SIZE) et fait un saut a cet index si le carry est a un. Si le carry est nul, zjmp ne fait rien mais consomme le même temps.
zjmp %23 met si carry == 1 met (PC + (23 % IDX_MOD)) dans le PC.
0x0a (ldi) : Cette opération modifie le carry.
ldi 3,%4,r1 lit IND_SIZE octets a l'adresse: (3 + (PC % IDX_MOD))
ajoute 4 a cette valeur. On nommera S cette somme.
On lit REG_SIZE octet a l'adresse (PC + (S % IDX_MOD)) qu'on copie dans r1.
Les paramètre 1 et 2 sont des index.
0x0b (sti) : sti r2,%4,%5 sti copie REG_SIZE octet de r2 a l'adresse (4 + 5)
Les paramètre 2 et 3 sont des index. Si les parametres 2 ou 3 sont des registres, on utilisera leur contenu comme un index,
0x0c (fork) : Cette instruction n'est pas suivie d'octet pour décrire les paramètres.
Elle prend toujours un index et crée un nouveau programme qui s'exécute a partir de l'adresse : (PC + (premier paramètre % IDX_MOD)).
Fork %34 crée un nouveau programme. Le nouveau programme herite des differents etats du pere.
0x0d (lld) : Comme ld sans le %IDX_MOD Cette opération modifie le carry.
0x0e (lldi) : Comme ldi sans le %IDX_MOD Cette opération modifie le carry.
0x0f (lfork) : Comme fork sans le %IDX_MOD
0x10 (aff) : Cette instruction est suivi d'un octet de parametrage pour decrire les paramatres.
Elle prend en paramètre un registre et affiche le caractère dont le code ascii est présent dans ce registre.
(un modulo 256 est applique au code ascii, le caractère est affiché sur la sortie standard)
Ex: ld %52,r3 aff r3 affiche '*' sur la sortie standard

2 réponses

deterrage
16
fredo10 Messages postés 31 Date d'inscription vendredi 25 novembre 2005 Statut Membre Dernière intervention 4 février 2006 15
7 déc. 2005 à 10:08
s'il vous plait aidez moi , j'ai vraiment besoin d'aide pour bouger.merci d'avance
14