KRS, добавьте итераций в цикл, для ясности. Когда цикл развернут полностью, возможная ошибка маскируется присвоением pList->Next = 0.
Оптимизация по размеру:
Код
// 46 for (i = 0; i < LIST_CAPACITY-1; i++)
??ListInit:
MOVS R0,#+0
MOVS R1,#+0
LDR R3,??ListInit_1 ;; list
// 47 {
// 48 pList = &list[i];
??ListInit_2:
LSLS R2,R1,#+3
ADDS R2,R3,R2
// 49 pList->Addr = i;
STR R1,[R2, #+0]
// 50 pList->Next = &list[i + 1]; //!!!
// 51 }
ADDS R1,R1,#+1
CMP R1,#+15
BCC ??ListInit_2
// 52 pList->Next = NULL;
STR R0,[R2, #+4]
// 53 }
ADD SP,SP,#+0
BX LR ;; return
Оптимизация по скорости:
Код
// 46 for (i = 0; i < LIST_CAPACITY-1; i++)
MOVS R0,#+0
MOVS R1,#+0
LDR R2,??ListInit_1 ;; list
// 47 {
// 48 pList = &list[i];
// 49 pList->Addr = i;
??ListInit_2:
STR R1,[R2, #+0]
// 50 pList->Next = &list[i + 1];
MOVS R3,R2
ADDS R3,R3,#+8
STR R3,[R2, #+4]
ADDS R1,R1,#+1
STR R1,[R3, #+0]
MOVS R4,R2
ADDS R4,R4,#+16
STR R4,[R3, #+4]
ADDS R1,R1,#+1
STR R1,[R4, #+0]
MOVS R3,R2
ADDS R3,R3,#+24
STR R3,[R4, #+4]
ADDS R1,R1,#+1
STR R1,[R3, #+0]
MOVS R4,R2
ADDS R4,R4,#+32
STR R4,[R3, #+4]
ADDS R1,R1,#+1
STR R1,[R4, #+0] //!!!
// 51 }
ADDS R1,R1,#+1
ADDS R2,R2,#+40
CMP R1,#+15
BCC ??ListInit_2
// 52 pList->Next = NULL;
STR R0,[R4, #+4]
// 53 }
POP {R4}
ADD SP,SP,#+0
BX LR ;; return