Анимация
JavaScript
|
Главная Библионтека 0002 struc 2 0002 0000 ; 0000 0000 struc 3 0000 field 0 0001 struc 3 ends struc db ? ends Message("0x%X \n", GetLastStrucIdx(
long GetNextStrucIdx(long index); Функция возвращает следующий индекс в списке структур. Индекс выражается целым числом от нуля до GetStrucQty() - 1. Индексы следуют последовательно вплотную друг за другом без «пустот» Поэтому псевдокод этой функции очень прост.
Или то же на языке Си: long GetNextStructIdx(long index) if (GetStrucQty()<a) return ++index; } return -1; По этой причине два следующих скрипта абсолютно идентичны: 0000 struc 1 0000 field 0 0001 field 1 0002 field 2 0003 struc 1 0003 0000 ; 0000 0000 struc 2 struc db ? db ? db ? ends struc 0000 field 0 0002 struc 2 0002 0000 ; 0000 0000 struc 3 0000 field 0 0004 struc 3 0004 dw ? ends struc dd ? ends auto a; for(a=0;a<GetStrucQty();a++) Message("0x%X 0x%X \n", a,GetStrucId(a) OxO OxFFOOOOFO 0x1 OxFFOOOOFE 0x2 0xFF000100 auto a; a=0; while(1) { Message("0x%X 0x%X \n", a,GetStrucId(a) a=GetNextStrucIdx(a); if (a==-1) break; 0x0 0xFF0000F0 0x1 0xFF0000FE 0x2 0xFF000100 Какой из этих двух способов использовать дело вкуса каждого. Однако, читабельность первого примера значительно лучше, а вероятность допустить ошибку -меньше.
long GetPrevStrucIdx(long index); Функция возвращает предыдущий индекс в списке структур. Индекс выражается целым числом от нуля до GetStrucQty() - 1. Индексы следуют последовательно вплотную друг за другом без «пустот» Поэтому псевдокод этой функции очень прост. long GetPrevStrucIdx(long index) if (index<-1) return; return -index; По этой причине два следующих скрипта абсолютно идентичны: 0000 struc 1 struc 0000 field 0 db ? 0001 field 1 db ? 0002 field 2 db ? 0003 struc 1 ends 0003 0000 ; -------------------0000 0000 struc 2 struc 0000 field 0 dw ? 0002 struc 2 ends 0002 0000 ; -------------------0000 0000 struc 3 struc 0000 field 0 dd ? 0004 struc 3 ends 0004 auto a; for(a=GetStrucQty();a>0;--a) Message("0x%X 0x%X \n", a,GetStrucId(a) 0x2 0xFF000100 0x1 0xFF0000FE 0x0 0xFF0000F0 auto a; a=GetStrucQty()-1; while(1) Message("0x%X 0x%X \n", a,GetStrucId(a) a=GetPrevStrucIdx(a); if (a==-1) break; 0x2 0xFF000100 0x1 0xFF0000FE 0x0 0xFF0000F0 Какой из этих двух способов использовать дело вкуса каждого. Однако, читабельность первого примера значительно лучше, а вероятность допустить ошибку -меньше. Операнд Пояснения 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 [ 80 ] 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |