Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Компьютерная литература > арифметические операции в цифровых процессорах


Автор: Notreg 19.4.2008, 21:58
собственно..

Автор: UniBomb 21.4.2008, 10:18
Ну в основе основ могу посоветовать книги товарища Фрунзе "Микроконтроллеры? Это же просто". В третьем томе достаточно хорошо расписаны основные операции над целочисленными данными. Причём там рассказано как оптимизировать и по размеру кода и по скорости выполнения. Для того, что бы понять систему команд ужно ознакомится толи с первым томом, то ли со вторым. Не смотри, что там рассматриваются пиковские микроконтроллеры - все алгоритмы применимы для любых ядер. 

Потом есть ещё книга "Алгоритмические трюки для программистов" Генри Уоррена мл. В этой книге тоже есть чего почитать по теме...

Автор: Notreg 24.4.2008, 20:05
не то наверно, интересуют сами алгоритмы умножения через сложение, которые выполняет процессор своими регистрами

Автор: Notreg 28.4.2008, 23:12
??

Автор: ksili 29.4.2008, 05:20
Цитата(Notreg @  25.4.2008,  00:05 Найти цитируемый пост)
 интересуют сами алгоритмы умножения через сложение

Ну кажется у Фрунзе что-то такое тоже есть. Посмотрите сначала, а потом говорите "не то"


Цитата(Notreg @  25.4.2008,  00:05 Найти цитируемый пост)
алгоритмы умножения через сложение

а что тут думать? 
n*m = n + n + .... + n (m раз)

Есть ещё мануалы Интеловские и АМДэшные. Там как раз регистры подробно упоминаются

Автор: UniBomb 29.4.2008, 10:11
Цитата(Notreg @  24.4.2008,  20:05 Найти цитируемый пост)
 интересуют сами алгоритмы умножения через сложение

Первый момент:
Не имеет значение какое семейство микропроцессора используется (и какой разрядности) - все алгоритмы применимы везде. И не важно - восьмибитная ли это атмега, или 32-битный арм7. Важно только то, что все числа представляются наборами отдельных байт. Так скажем тип int - есть двухбайтное число. Значит мы можем работать как с младшим байтом, так и со страшим. Т.е. складываем младшие байты, смотрим появился ли флаг переполнения (есть в любом семейтве микропроцессоров) и запоминаем факт наличия. Затем складываем старшие байты и если был факт переполнения, то инкрементируем результат. Опять смотрим флаг переполнения и если надо, то переносим значение в третий байт результата. Данный алгоритм применим к любому семейству микропроцессоров.

Второй момент:
Если необходимо использовать особенности конкретного семейства микропроцессора. Например в 32-ух разрядных мп удобнее работать с числами, кратными 32-ум байтам, нежели выделять из 32-ух бит 8 бит. Да и потом нужно смотреть какие операции микропроцессор может выполнять на аппаратном уровне. Т.е. та же самая атмега может производить беззнаковое умнжение однобайтных чисел. Тогда в подпрограмме умножения больших чисел мы можем сократить количество использования операций сложения для увеличения скорости работы.

Суть всего - полистай третий том от товарища Фрунзе.


Цитата(Notreg @  24.4.2008,  20:05 Найти цитируемый пост)
которые выполняет процессор своими регистрами

Не совсем верно. Регистрами никто ничего не выполняет. Всегда что то выполняет АЛУ, а регистры используются для хранения даных. Опять же мотивируясь вторым моментом - если нужна привязка к какому то конкретному семейству, то ищи доки по этому семейству.

Автор: Notreg 30.4.2008, 18:44
Цитата

а что тут думать? 
n*m = n + n + .... + n (m раз)


так не пойдет нужно еще сдвигать, быстрее будет..

Цитата

Регистрами никто ничего не выполняет.


АЛУ выполняет, пользуясь регистрами..

Цитата

Суть всего - полистай третий том от товарища Фрунзе.


Мля а я первый том качнул..

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)