Но при смене оптимизации на balanced или size код все равно не правильныйbalanced
Код
47 void ListInit(void)
48 {
49 List *pList;
50 int i;
51
52 for (i = 0; i < LIST_CAPACITY-1; i++)
\ ListInit:
\ 00000000 054A LDR.N R2,??ListInit_0 ;; list
\ 00000002 0020 MOVS R0,#+0
\ 00000004 0021 MOVS R1,#+0
53 {
54 pList = &list[i];
\ ??ListInit_1:
\ 00000006 1300 MOVS R3,R2
55 pList->Addr = i;
\ 00000008 1960 STR R1,[R3, #+0]
56 pList->Next = &list[i + 1]; //ñòðîêà íå òðàíñëèðóåòñÿ
57 }
\ 0000000A 491C ADDS R1,R1,#+1
\ 0000000C 0832 ADDS R2,R2,#+8
\ 0000000E 0F29 CMP R1,#+15
\ 00000010 F9DB BLT.N ??ListInit_1
58 pList->Next = 0;
\ 00000012 5860 STR R0,[R3, #+4]
59 }
\ 00000014 7047 BX LR ;; return
\ 00000016 00BF Nop
\ ??ListInit_0:
\ 00000018 ........ DC32 list
size
Код
\ In section .text, align 4, keep-with-next
47 void ListInit(void)
48 {
49 List *pList;
50 int i;
51
52 for (i = 0; i < LIST_CAPACITY-1; i++)
\ ListInit:
\ 00000000 054A LDR.N R2,??ListInit_0 ;; list
\ 00000002 0020 MOVS R0,#+0
\ 00000004 0021 MOVS R1,#+0
53 {
54 pList = &list[i];
\ ??ListInit_1:
\ 00000006 12EBC103 ADDS R3,R2,R1, LSL #+3
55 pList->Addr = i;
\ 0000000A 1960 STR R1,[R3, #+0]
56 pList->Next = &list[i + 1]; //ñòðîêà íå òðàíñëèðóåòñÿ
57 }
\ 0000000C 491C ADDS R1,R1,#+1
\ 0000000E 0F29 CMP R1,#+15
\ 00000010 F9DB BLT.N ??ListInit_1
58 pList->Next = 0;
\ 00000012 5860 STR R0,[R3, #+4]
59 }
\ 00000014 7047 BX LR ;; return
\ 00000016 00BF Nop
\ ??ListInit_0:
\ 00000018 ........ DC32 list
Цитата(vet @ Mar 13 2008, 11:55)

KRS, тоже проявляется. Обратите внимание на адреса 0000001A-0000001C.
А точно каждая 3я итерация неверная