아무도 지적 할 수 있습니까? 나는 문제를 볼 수 없다. 내가) 대신 C의 어셈블러로이 작성하는 이유를 이해하지 않습니다ARM - 문자열 검색 중 무한 루프
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
제안 해 주셔서 감사합니다. 이것은 실제로 숙제 문제입니다. 이후 ADD를 ADD로 변경하여 조건부 ADDNE 명령을 제거함으로써 문제를 게시했습니다. 그러나 이것을 읽은 후, 나는 디자인에 심각한 결함이 있음을 알았습니다. 선생님이 문자열이 비어 있으면 특별한 일이 일어나기를 원했기 때문에 빈 문자열을 걸러내는 별도의 루틴을 보여주지 않았습니다. tipps에 감사드립니다! 선생님이 보여준 결함에 대해서는 언급하지 않았지만 어쨌든 제 코드를 리펙토링합니다! – IAE