Bonjour,

J'ai un petit souci : je dois faire une fonction inverse en assembleur, elle doit inverser les caractères d'une chaîne en utilisant la pile donc par exemple la chaîne définie par DC.B « xyz » devient la chaine « zyx ».

j'ai trouvé la solution suivante :

Code Asm : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
                 DATA
Chaine:	 DC.B	      "xxxxyyyyzzzz" 
                 CODE
                 MOVE.B	#3, D0 ;taille de la chaine
                 MOVE.B	#0, D1
                 MOVE.B	#0, D2
                 LEA	        Chaine, A0
EMP:	         CMP.B	D0, D1
                 BEQ	        DEP
                 MOVE.L	(A0)+, -(A7)
                 ADD.B	#1, D1
                 BRA          EMP
DEP:	         CMP.B	D0, D2
                 BEQ	 Fin
                 MOVE.L	(A7)+, (A0)+
                 ADD.B	#1, D2
                 BRA	 DEP
Fin:	         RTS


Voila. Il ne marche que lorsque je mets comme chaîne « xxxyyyzzz » mais pas lorsque je mets « xyz ». Vu qu'avec le MOVE.L, on ne peut prendre que 4 octets par 4 octets. On peut manipuler avec 4 caractères, pas un seul. Et en fait, on peut pas faire MOVE.B puisqu'on ne peut manipuler que les adresses (A0
à A7) avec des LONG. Du coup, si quelqu'un connaît la solution, pourriez-vous m'aider ?

Merci.