реклама на сайте
подробности

 
 
> Поразрядные операции и сложение/вычитание, как проще реализовать?
Peshii Vsadnik
сообщение Dec 23 2005, 13:26
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 20
Регистрация: 28-12-04
Пользователь №: 1 717



Простой вопрос, но совсем отупел, а ответа не нашел. Предположим, имеется два регистра A и B, и нужно уметь их сложить или вычесть, однако доступны только поразрядные операции AND, OR, XOR, NOT (в ALU). Какие последовательности поразрядных операций приводят к сложению A и B и к их вычитанию? Имеется ввиду нечто похожее на ADD и SUB.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Shamil
сообщение Jan 25 2006, 16:22
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 160
Регистрация: 23-12-04
Из: Уфа
Пользователь №: 1 631



Цитата(Peshii Vsadnik @ Dec 26 2005, 15:21) *
А вот есть ли способ написать нечто вроде ~(A)&(B^A)|B.... ну и так далее, чтобы в результате получить A+B и A-B? вот в чем вопрос...
Да, не используя сдвига!


Одной формулой не получиться, и без сдвига не обойтись,
если только не делать поразрядного вычисления (которое
само по себе требует сдвига).

Тут нужно сделать N итераций (где N – количество
разрядов операндов, в худшем случае) следующего вида:
1. Вычислить сумму A и B без учета переносов – Sab = A xor B
2. Вычислить слово переносов для этих операндов – Cab = A & B
3. Сдвинуть слово переносов влево на один разряд
4. Вычислить арифметическую сумму Sab и сдвинутого слова переносов Cab

Для последнего пункта рекурсивно использовать весь
вышеприведенный алгоритм, до тех пор, пока слово переносов
не станет равно нулю. В худшем случае понадобится N итераций.

Цитата(Peshii Vsadnik @ Dec 26 2005, 15:21) *
Со сдвигом просто - сдвинули B так, чтобы биты не перекрывались, и взяли A|B

Это как это ? Откуда возьмется сумма ?


P.S. А где ты откопал такое странное ALU ?
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 11:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01373 секунд с 7
ELECTRONIX ©2004-2016