Не знаю авр, попробую на словах
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено -=ВН=- 14 апреля 2005 г. 17:50
В ответ на: Блин, да умею я множить 16-, 24- и 32-битные знаковые числа. Я 17-битные не умею множить, а апнота токого нет отправлено Глупый пИнгвин 14 апреля 2005 г. 17:26

Когда работаете со знаком и есть перенос при сложении, это означает что результат сложения отрицательный. Т.е. Вы после анализа переноса должны вычесть к-т из старшей части аккумулятора.
Младшие 16 разрядов результата сложения беззнаковые. С ними все как и было.

Можно проверить по шагам.
1.Расширьте знак входных данных, т.е.
сделайте их 24-х разрядными и старшие 8 разрядов - расширение знака.
2. Складывайте расширенные 24-х разрядные. Результат тоже 24-х разрядный. Перенос из 24-го разряда не важен.
А в старшем байте (разряды 23-16) будет либо 0, либо -1 (0xff).
Умножьте со знаком старший байт результата сложения (разряды 23-16) на к-т. Результат положите в старшую часть аккумулятора.
3. Младшие 16 разрядов рез-та сложения беззнаковые, умножайте их на к-т, т.к. как раньше.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru