Aide pour l'assembleur ARM

Aide pour l'assembleur ARM - ASM - Programmation

Marsh Posté le 17-11-2008 à 08:46:47    

Bonjour,
 
Voilà je suis débutant en assembleur, je voulais savoir si ce que j'ai fais est juste :
 
Enoncer :  Le sous-programme Chaine_comparer retourne une valeur permettant de classer deux chaînes de caractères dont les adresses sont passées en paramètres :
      si les deux chaînes sont identiques, le résultat est nul ;
      si la première chaîne vient avant la seconde dans l’ordre lexicographique, le résultat est strictement négatif ;
      si la première chaîne vient après la seconde dans l’ordre lexicographique, le résultat est strictement positif.
Donc je doit traduire en assembleur ce bout de programme en C
 

Code :
  1. int Chaine_comparer(char* ch1, char* ch2) {
  2.    while(*ch1 != 0 && *ch2 != 0 && *ch1 == *ch2) {
  3.       ch1++;
  4.       ch2++;
  5.    }
  6.    return *ch1 - *ch2;
  7. }


 
et voici ce que j'ai fais en assembleur, est-ce juste??
 

Code :
  1. Chaine_comparer:
  2. /* Sauvegarde des anciennes valeurs valeurs */
  3. stmb sp!,{r4,r5}
  4. Chaine_comparer_boucle:
  5.  ldrb r4,[r0], #1
  6.  ldrb r5,[r1], #1  /* Charge les valeurs pointees par r0 et r1 dans r4 et r5 */
  7.  cmp  r4, #0
  8.  beq  Chaine_comparer_fin
  9.  cmp  r5, #0
  10.  beq  Chaine_comparer_fin /* Si r4 ou r5 == 0 alors une des cahine est finie on termine le programme */
  11.  cmp  r4, r5
  12.  beq  Chaine_comparer_boucle /* Si r4 = r5: les caracterses st identique: on reboucle */
  13.  bne  Chaine_comparer_fin /* sinon, caracteres differents => fin de traitement */
  14. Chaine_comparer_fin:
  15.  sub r0,r4,r5 /* Attention: Eventuel pb de format: valeur signee!!!: A tester */
  16. /* Rechargement des valeurs sauvegardees */
  17. ldmia sp!, {r4,r5}
  18. /* Retour au programme appelant */
  19. mov pc, lr


 
Merci d'avance

Reply

Marsh Posté le 17-11-2008 à 08:46:47   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed