Zen2s » 24 ноя 2015, 20:25
Требуется сложить на ассемблере два регистра:
R2=0x5279B077
R3=0xBC8FAFCC
Результат должен быть: 0x0F096043
Но после сложения ADDS R3,R3,R2 в R3 упорно получаю 0x0E096044
Что-где не так, не пойму.
Есть подозрение, что что-то со знаковостью, но разве в АРМ контролируется знак числа?
Подскажите плиз...
Пробовал и в Thumb и в ARM режиме, пробовал складывать по словам (по 2 байта). Отключал прерывания с горя. Все равно результат неверный...
Dmitry__ » 25 ноя 2015, 00:41
Прям мистика какая-то.
Симулятор IAR все нормально выдал: 0x0F096043
Ваш результат не похож на арифметику со знаком.
dccharacter » 25 ноя 2015, 02:03
Российские программисты нашли баг в архитектуре ARM
Zen2s » 25 ноя 2015, 14:10
Спасибо всем за помощь!
Ключевое слово было: little-endian !!!
В этом случае при загрузке из памяти командой LDR R3,[R2] выходило так:
// ОЗУ (R2=) BC 8F AF CC (R3=) 52 79 B0 77
R2=0xCCAF8FBC
R3=0x77B07952
Правильный результат: 0x4460090E !!!
Dmitry__ » 25 ноя 2015, 14:42
Вот тебе свезло. На 2-х наборах зеркальных чисел получить сумму с практически одинаковыми наборами байт
Это не про тебя? В комнате 100 стульев, один с подпиленной ножкой, тебя запускают в комнату и ты садишься...