Что то я в какую то ботву наступил с иаром. Ничего понять не могу (может оно и окажется очевидно для кого то, но меня похоже переклинило).
IAR 4.40 (с 4.31А было то же самое - попробовал обновиться именно на фоне этого глюка). LPC2138, ARM, Thumb mode - пофиг. Little endian, как водится. MT-Link первой версии, проверенный в бою.
Есть некий массив данных в памяти, повторяющиеся структуры определенного формата после некоего заголовка со своим форматом. Есть указатель, описанный как ListData * LPtr;... Первый элемент в структуре ListData - ID, тип - unsigned long. На момент выполнения вот этой вот строчки (сразу с асмом) LPtr (он в R9) равен 0x40002967.
ltemp = LPtr->Id;
0001BACC E5990000 LDR R0, [R9, #+0]
0001BAD0 E1B0A000 MOVS R10, R0
Вот кусок дампа памяти на тот же момент...
0x40002960 00 00 00 00 00 48 00 47 00 00 00 42 e6 9d 44 0c 00 04 01
Дебаггер, когда пытаешься посмотреть LPtr->Id кажет 0x00000047. Quick Watch структуру показывает как надо.
Вот только в результате выполнения той строчки в ltemp (R10) стабильно оказывается 0x00480047
Ничего понять не могу, абсолютно.