Salut Darkpig,
le SP c'est le stack pointer, le pointeur de pile, c'est un reg qui pointe une zone mémoire qui est utilisé pour un paquet de truc. (Sauvegarde de regs, d'adresse de retour pour des appels de routines, etc...)
Ces progs peuvent t'aidé mais sans avoir aucune notion de l'asm utilisé ca peut etre un peu chaud. Car chaque programmeur a son style, ces techniques. Et parfois des trucs super tordus.
exemple : d7=$12340001
un sub.w d7, d1
ne va soustraire qu'un a d1. C'est un truc que j'utilise de temps en temps, mais faut faire gaffe a tout le reg, car l'autre partie de d7 sera utilisé plus loin.
ou sinon chargé deux var1 en word accolés, les chargés d'un coup avec un seul move.l
move.l Var1,dn
suivant l'operation juste ne jouant avec un word ou un long, on touche la var qu'on veux sinon un simple swap suffit.
move.l Dn,Var1
Var1 : dc.w 4
Var2 : dc.w 8
ensuite ne surtout pas oublié le prefetch du 68000 qui fait que sous debugger certaines valeurs sont erronés !!! Que pour beaucoup d'instructions mathématiques, pas besoin de faire de test pour vérifier certains résultat, etc...
ensuite certaines instructions n'affectent pas les flags, donc parfois tu as ton test a plusieurs kilosbytes plus loin. Exemple :
jsr routine_48
beq.s Game_over
8 kilos de code !!
ce que vous voulez
Routine_48:
movem.l xxx
sub.w #1,Nb_vies
movem.l xxxx
rts
Ce ne sont que quelques exemples, car suivant que le codeur veule optimisé en vitesse, en place mémoire, ça change du tout au tout. J'ai déjà utilisé des tableaux qui était indexé sur d'autres tableaux, donc le moindre registre modifié, plantage garanti. C'est un des gros avantages de l'assembleur, faire des trucs que tu peux pas faire avec d'autres langages, dans les entrailles de la bête. Sans parlé du code généré, auto modifiant, etc...
Mais en tout cas bonne chasse aux vies
GT Pro Motorola
petit H.S. on voit bien ce qui dev du 68000 sur des PC, car le coup du moveq.l me fait toujours sourire, car un moveq le fait obligatoirement sur un long, extension de la valeur 8 bits.