poche44 | 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 :
- int Chaine_comparer(char* ch1, char* ch2) {
- while(*ch1 != 0 && *ch2 != 0 && *ch1 == *ch2) {
- ch1++;
- ch2++;
- }
- return *ch1 - *ch2;
- }
|
et voici ce que j'ai fais en assembleur, est-ce juste??
Code :
- Chaine_comparer:
- /* Sauvegarde des anciennes valeurs valeurs */
- stmb sp!,{r4,r5}
- Chaine_comparer_boucle:
- ldrb r4,[r0], #1
- ldrb r5,[r1], #1 /* Charge les valeurs pointees par r0 et r1 dans r4 et r5 */
- cmp r4, #0
- beq Chaine_comparer_fin
- cmp r5, #0
- beq Chaine_comparer_fin /* Si r4 ou r5 == 0 alors une des cahine est finie on termine le programme */
- cmp r4, r5
- beq Chaine_comparer_boucle /* Si r4 = r5: les caracterses st identique: on reboucle */
- bne Chaine_comparer_fin /* sinon, caracteres differents => fin de traitement */
- Chaine_comparer_fin:
- sub r0,r4,r5 /* Attention: Eventuel pb de format: valeur signee!!!: A tester */
- /* Rechargement des valeurs sauvegardees */
- ldmia sp!, {r4,r5}
- /* Retour au programme appelant */
- mov pc, lr
|
Merci d'avance
|