| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Компьютерная литература > арифметические операции в цифровых процессорах |
| Автор: 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 |
Ну кажется у Фрунзе что-то такое тоже есть. Посмотрите сначала, а потом говорите "не то" а что тут думать? n*m = n + n + .... + n (m раз) Есть ещё мануалы Интеловские и АМДэшные. Там как раз регистры подробно упоминаются |
| Автор: UniBomb 29.4.2008, 10:11 |
Первый момент: Не имеет значение какое семейство микропроцессора используется (и какой разрядности) - все алгоритмы применимы везде. И не важно - восьмибитная ли это атмега, или 32-битный арм7. Важно только то, что все числа представляются наборами отдельных байт. Так скажем тип int - есть двухбайтное число. Значит мы можем работать как с младшим байтом, так и со страшим. Т.е. складываем младшие байты, смотрим появился ли флаг переполнения (есть в любом семейтве микропроцессоров) и запоминаем факт наличия. Затем складываем старшие байты и если был факт переполнения, то инкрементируем результат. Опять смотрим флаг переполнения и если надо, то переносим значение в третий байт результата. Данный алгоритм применим к любому семейству микропроцессоров. Второй момент: Если необходимо использовать особенности конкретного семейства микропроцессора. Например в 32-ух разрядных мп удобнее работать с числами, кратными 32-ум байтам, нежели выделять из 32-ух бит 8 бит. Да и потом нужно смотреть какие операции микропроцессор может выполнять на аппаратном уровне. Т.е. та же самая атмега может производить беззнаковое умнжение однобайтных чисел. Тогда в подпрограмме умножения больших чисел мы можем сократить количество использования операций сложения для увеличения скорости работы. Суть всего - полистай третий том от товарища Фрунзе. Не совсем верно. Регистрами никто ничего не выполняет. Всегда что то выполняет АЛУ, а регистры используются для хранения даных. Опять же мотивируясь вторым моментом - если нужна привязка к какому то конкретному семейству, то ищи доки по этому семейству. |
| Автор: Notreg 30.4.2008, 18:44 | ||||||
так не пойдет нужно еще сдвигать, быстрее будет..
АЛУ выполняет, пользуясь регистрами..
Мля а я первый том качнул.. |