Привет! Я пытаюсь написать код, который выполняет поиск по шаблону и ранжирует топ-3 самых популярных шаблонов, и сколько раз он считает шаблоны.
Я могу сделать код, который оценивает топ-2 моделей. но я не могу сделать ранг 3 один.
(я выделил регистры таким образом)
R7: количество паттернов top1
R8: топ1 шаблон
R10: количество образцов топ2
R11: топ2 шаблон
это мой настоящий код, который работает
void ex3(){
int result[4];
example3(0x00,0x100, 0x0, result);
sendstr("Top 1 pattern : ");
printDecimal(result[0]);
sendstr("\n");
sendstr("Top 1 pattern count : ");
printDecimal(result[1]);
sendstr("\n");
sendstr("Top 2 pattern : ");
printDecimal(result[2]);
sendstr("\n");
sendstr("Top 2 pattern count : ");
printDecimal(result[3]);
sendstr("\n");
}
PRESERVE8
AREA Ex3, CODE, READONLY
EXPORT example3
example3
STMFD sp!,{r4-r9,lr}
MOV R4, r2
MOV R6, R3
MOV R7, #0
MOV R8, #0
Loop2
MOV r3, #0
MOV r9, r0
Loop
LDRB r5, [r9], #1
CMP r4, r5
ADDEQ r3, r3, #1
CMP r9, r1
BLS Loop
CMP R3, R7
BLT Com2
Com1
MOVGT R10,R7
MOVGT R11,R8
MOVGT R7, R3
MOVGT R8, R4
B Here
Com2
CMP R3,R10
BLT Here
MOVGT R10,R3
MOVGT R11,R4
CMP R4, #0XFF
ADDLT R4, R4, #1
BLT Loop2
STR r8, [r6]
STR r7, [r6,#4]
STR r11, [r6,#8]
STR r10, [r6,#12]
LDMFD sp!,{r4-r9,lr}
MOV PC, lr
END
но когда я попробовал коды ранга 3 с той же логикой, я просто изменил распределение регистров таким образом
r7 count of top1 pattern
r8 top1 pattern
r9 top2 count
r10 TOP2
r11 top3 count
r12 top3
он показывает странный результат из-за (на мой взгляд) неправильного распределения регистров (мне нужно больше регистров empy ...). Что такое простой или правильный способ решить проблему отсутствия регистрации?
PRESERVE8
AREA Ex3, CODE, READONLY
EXPORT example3
example3
STMFD sp!,{r4-r9,lr}
MOV R4, r2
MOV R6, R3
MOV R7, #0
MOV R8, #0
Loop2
MOV r3, #0
MOV r9, r0
Loop
LDRB r5, [r9], #1
CMP r4, r5
ADDEQ r3, r3, #1
CMP r9, r1
BLS Loop
CMP R3, R7
BLT Com2
Com1
MOVGT R11,R9
MOVGT R12,R10
MOVGT R9,R7
MOVGT R10,R8
MOVGT R7, R3
MOVGT R8, R4
B Here
Com2
CMP R3,R9
BLT Com3
MOVGT R11,R9
MOVGT R12,R10
MOVGT R9,R3
MOVGT R10,R4
B Here
Com3
CMP R3,R11
MOVGT R11,R3
MOVGT R12,R4
Here
CMP R4, #0XFF
ADDLT R4, R4, #1
BLT Loop2
STR r8, [r6]
STR r7, [r6,#4]
STR r10, [r6,#8]
STR r9, [r6,#12]
STR r12, [r6,#16]
STR r11, [r6,#20]
LDMFD sp!,{r4-r9,lr}
MOV PC, lr
END