ARM: Сложение с переполнением

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
zen2s
Родился
Сообщения: 4
Зарегистрирован: Вт дек 30, 2014 17:31:50

ARM: Сложение с переполнением

Сообщение zen2s »

Требуется сложить на ассемблере два регистра:
R2=0x5279B077
R3=0xBC8FAFCC
Результат должен быть: 0x0F096043

Но после сложения ADDS R3,R3,R2 в R3 упорно получаю 0x0E096044
Что-где не так, не пойму.
Есть подозрение, что что-то со знаковостью, но разве в АРМ контролируется знак числа?
Подскажите плиз...

Пробовал и в Thumb и в ARM режиме, пробовал складывать по словам (по 2 байта). Отключал прерывания с горя. Все равно результат неверный...
Аватара пользователя
rjhaviy
Опытный кот
Сообщения: 762
Зарегистрирован: Чт мар 04, 2010 12:38:27

Re: ARM: Сложение с переполнением

Сообщение rjhaviy »

Какими командами грузим значения в регистры?
Против лома - нет приема! ...разве что, Закона Ома!
Лом ужасен и велик! Но... хороший проводник!
zen2s
Родился
Сообщения: 4
Зарегистрирован: Вт дек 30, 2014 17:31:50

Re: ARM: Сложение с переполнением

Сообщение zen2s »

rjhaviy писал(а):Какими командами грузим значения в регистры?

Код: Выделить всё

LDR R3, [R2]
//...some...
LDR R2, [R2]
BL Save Registers    // Здесь  (R2=) BC 8F AF CC  (R3=) 52 79 B0 77
ADDS R3, R3, R2
BL Save Registers    // А здесь (R2=) BC 8F AF CC  (R3=) 0E 09 60 44


P.S. Save Registers - технологическая функция, сохраняет состояние всех регистров в ОЗУ, но ничего не изменяет... И, да, без нее тоже не работает...
Аватара пользователя
rjhaviy
Опытный кот
Сообщения: 762
Зарегистрирован: Чт мар 04, 2010 12:38:27

Re: ARM: Сложение с переполнением

Сообщение rjhaviy »

Вроде как:
LDR r2, [r1] ; Load r2 with contents of memory location pointed to by contents of r1. Загрузка r2 содержимым ячейки памяти, на которую указывает содержимое r1.

Попробуйте для начала так:

Код: Выделить всё

LDR R2, =0x5279B077
LDR R3, =0xBC8FAFCC
ADDS R3,R3,R2


Для загрузки в регистр конкретного значения можно указать вторым операндом не адрес хранения числа, а непосредственно требуемое число и добавить перед ним знак '='. Тогда все необходимые действия, вплоть до размещения числа в памяти, будут выполнены ассемблером автоматически, гарантируя загрузку требуемого значения.
Против лома - нет приема! ...разве что, Закона Ома!
Лом ужасен и велик! Но... хороший проводник!
zen2s
Родился
Сообщения: 4
Зарегистрирован: Вт дек 30, 2014 17:31:50

Re: ARM: Сложение с переполнением

Сообщение zen2s »

Спасибо всем за помощь!
Ключевое слово было: little-endian !!!
В этом случае при загрузке из памяти выходило так:
// Здесь (R2=) BC 8F AF CC (R3=) 52 79 B0 77

R2=0xCCAF8FBC
R3=0x77B07952
Правильный результат: 0x4460090E !!!
Ответить

Вернуться в «ARM»