Quelqu'un peut-il indiquer pourquoi? Je ne peux pas voir le problème.ARM - Boucle infinie lors de la recherche de chaîne
Chaîne à la recherche: « aassaas »
Chaîne à rechercher avec: « comme »
SEARCHSTRING:
STMFD SP!, {R4-R7, LR}
MOV R6, #0 @Matches found
MOV R3, #0 @Placeholder
LOOP: LDRB R4, [R0] @R4 = String to search
LDRB R5, [R1] @R5 = String to search with
CMP R4, R5 @Do they match?
ADDEQ R3, R3, #1 @If yes, increase placeholder
LDREQB R4, [R0, #1]! @Get next char
LDREQB R5, [R1, #1]! @Get next char
BLNE RESET @If not, reset placeholder and strings.
@R0 is nevertheless initial pos+1
CMP R5, #0 @Is string to search with at the end?
ADDEQ R6, R6, #1 @If so, add +1 to matches
BLEQ RESET @Reset placeholder and strings.
CMP R4, #0 @Is the string to search finished?
BNE LOOP @If not, start over.
MOV R0, R6 @If so, move answer into R0.
LDMFD SP!, {R4-R7, PC} @Jump back.
RESET:
STMFD SP!, {LR}
CMP R3, #0 @Is the placeholder at 0? (initial position)
SUBNE R0, R0, R3 @If not, subtract from String to search pos
SUBNE R1, R1, R3 @And string to be searched pos
ADDNE R0, R0, #1 @Increment string to search+1 so we don't start at the same spot
MOVNE R3, #0 @Empty the placeholder
LDMFD SP!, {PC} @Jump back
Merci pour les suggestions! C'est en effet un problème de devoirs. J'ai depuis posté la question résolue en éliminant la commande ADDNE conditionnelle en le changeant en ADD. Depuis que j'ai lu ceci, j'ai remarqué que j'avais vraiment des défauts flagrants dans la conception. Ce que je n'ai pas montré était une routine séparée qui filtrait les chaînes vides parce que notre professeur voulait que quelque chose de spécial se produise si la chaîne est vide. Merci pour les conseils! Bien que l'enseignant n'ait pas commenté les défauts que vous avez montrés, je vais refactoriser mon code de toute façon! – IAE