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 */
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
et voici ce que j'ai fais en assembleur, est-ce juste??
Merci d'avance