roboforum.ru

Технический форум по робототехнике.

 

умножение и деление для 8-ми 16-ти разрядных чисел

Материалы для скачивания и прочтения.

умножение и деление для 8-ми 16-ти разрядных чисел

Сообщение EdGull » 01 ноя 2007, 04:08

Выполнение арифметических операций c целыми числами

На сайте http://www.atmel.com предлагаются разработанные специалистами фирмы Atmel подпрограммы целочисленного умножения и деления для 8-ми 16-ти разрядных чисел. В данной статье рассматриваются используемые в этих программах алгоритмы. В приложении приводятся тексты программ для 8-разрядных чисел. Программы для 16-разрядных чисел строятся аналогично. Большинство предлагаемых программ выполнено в двух вариантах. Первый оптимизирован с точки зрения длины результирующего программного кода, а второй – с точки зрения времени исполнения.
Вложения
Arithmetic.doc
(204.5 КиБ) Скачиваний: 969
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

Re: умножение и деление для 8-ми 16-ти разрядных чисел

Сообщение deeeman » 11 дек 2007, 09:24

Привет тебе!
наткнулся на твою тему, т к очень нужно реализовать подобное...
а именно Программу для умножения двух 16-разрядных чисел без
знака на языке ассемблера МП К580.


Описание задачи:
Умножение двоичных чисел представляет последовательность операций сдвига и сложения (аналогично умножению «в столбик» десятичных чисел).
Шестнадцатиразрядные числа занимают два байта, поэтому целесообразен следующий алгоритм:
- загружаем множимое в пару регистров DE, множитель – в пару регистров BC, результат будет храниться в паре регистров HL.
- умножаем множимое сначала на младший байт множителя, потом – на старший байт, для этого:
- загружаем в регистр А значение регистра С.
- регистр С обнуляем, и в дальнейшем используем в качестве счетчика
- в регистр С заносим значение 8 (00001000).
- организуем цикл: при каждом обороте цикла анализируем разряды множителя, начиная с его старшего разряда. В соответствии с этим частичные произведения будут формироваться, начиная со старшего частичного произведения. Накопление суммы частичных произведений будем производить в паре регистров HL, то есть к содержимому предварительно сброшенной в нуль пары регистров HL вначале прибавим восьмое частичное произведение; затем, сдвинув на один разряд влево содержимое пары регистров HL, прибавим седьмое частичное произведение, и так далее, пока не будут просуммированы все частичные произведения. После этого уменьшаем значение счетчика (регистра C) на единицу. Цикл выполняем до тех пор пока значение регистра С не станет равным нулю.
- сдвигаем на один разряд влево содержимое регистров HL, загружаем в регистр A значение регистра В, устанавливаем значение регистра С в 8, и повторяем цикл: то есть производим умножение на старший байт.
- записываем полученное произведение – значение пары регистров HL - в оперативную память.

Следует учесть, что если полученное произведение будет более, чем шестнадцатиразрядным, то старшие разряды будут отброшены.

Буду рад получить от тебя какие нибудь комментарии, помощь, или как найти материал по этой теме.
Вложения
kr.doc
полностью описание
(47.5 КиБ) Скачиваний: 482
deeeman
 
Сообщения: 4
Зарегистрирован: 11 дек 2007, 09:12
Откуда: Г Новосибирск

Re: умножение и деление для 8-ми 16-ти разрядных чисел

Сообщение Vooon » 11 дек 2007, 09:44

посмотри там:
http://vooon.h17.ru/phpBB2/viewforum.php?f=15
(требуется регистрация)

уж непомню что мы делали на 580ом может и не оказаться нужного :crazy:
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3326
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Re: умножение и деление для 8-ми 16-ти разрядных чисел

Сообщение deeeman » 11 дек 2007, 11:02

можешь конкретно указать раздел, что т оне нашел
deeeman
 
Сообщения: 4
Зарегистрирован: 11 дек 2007, 09:12
Откуда: Г Новосибирск

Re: умножение и деление для 8-ми 16-ти разрядных чисел

Сообщение Vooon » 11 дек 2007, 11:14

так я на конкретный форум линк дал, но требуется регистрация, форум закрыт от анонимов
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3326
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Re: умножение и деление для 8-ми 16-ти разрядных чисел

Сообщение deeeman » 11 дек 2007, 11:35

в общем достал программу для 8 разрядных надо переделать для 16
поможите плиз!

Код: Выделить всёРазвернуть
;**********************************************************************
;1. Текст программы mpy8u_c умножения 8-и разрядных целых  беззнаковых ;чисел, оптимизированной с точки зрения кода.
;**********************************************************************
;*****Использование регистров

.def   mc8u   =r16      ;множимое
.def   mp8u   =r17      ;множитель
.def   m8uL   =r17      ;младший байт результата
.def   m8uH   =r18      ;старший байт результата
.def   mcnt8u   =r19      ;счетчик цикла

;*****

mpy8u_c:   clr   m8uH         ;очистить старший байт результата
         ldi   mcnt8u,8      ;инициализировать счетчик цикла
   lsr   mp8u         ;cдвинуть вправо множитель
   
m8u_1:   brcc   m8u_2         ;переход, если С=0
add       m8uH,mc8u      ;прибавить множимое к старшему
;байту результата
m8u_2:   ror   m8uH         ;сдвинуть вправо старший байт
;результата
         ror   m8uL         ; сдвинуть вправо младший
;байт результата и множитель
      dec   mcnt8u         ;уменьшить на 1 счетчик цикла
         brne   m8u_1         ;переход, если счетчик цикла еще
                     ;не равен 0
   ret
Последний раз редактировалось Vooon 11 дек 2007, 11:43, всего редактировалось 1 раз.
Причина: тег CODE
deeeman
 
Сообщения: 4
Зарегистрирован: 11 дек 2007, 09:12
Откуда: Г Новосибирск

Re: умножение и деление для 8-ми 16-ти разрядных чисел

Сообщение Vooon » 11 дек 2007, 11:42

только это асемблер авр-ов (похоже)
а не кр580. врятли это получится легко перенести
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3326
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Re: умножение и деление для 8-ми 16-ти разрядных чисел

Сообщение deeeman » 11 дек 2007, 11:45

а где можно поискать коды для для МП К580?
deeeman
 
Сообщения: 4
Зарегистрирован: 11 дек 2007, 09:12
Откуда: Г Новосибирск

Re: умножение и деление для 8-ми 16-ти разрядных чисел

Сообщение Vooon » 11 дек 2007, 14:57

поищи программы для intel 8080 - на сколько помню кр580 его клон был.
вобще нарыть очень сложно - если где и есть то скорее всего это лабы какой-нибудь добрый человек выложил.
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3326
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Re: умножение и деление для 8-ми 16-ти разрядных чисел

Сообщение D-M » 11 дек 2007, 15:10

ищи журналы радио за 86 год;)
как раз тогда собирали комп:"Радио 86", а он и был на этом проце

Добавлено спустя 1 минуту 31 секунду:
аааааа вспомнил...
этим барахлом занимаются вот эти люди:
http://www.nedopc.org/forum/
Последний раз редактировалось D-M 11 дек 2007, 18:27, всего редактировалось 1 раз.
Аватара пользователя
D-M
 
Сообщения: 486
Зарегистрирован: 28 мар 2006, 17:28
Откуда: Пенза

Re: умножение и деление для 8-ми 16-ти разрядных чисел

Сообщение rig » 11 дек 2007, 15:30

ухты куда капнули КР 580 й , у меня на полках где-то пылится "Орион 128" продолжение развития "РК-86" с дополнительным банком озу и адаптером дисковода. самодельным БП, клавиатурой. школа 8-9 класс 88-89-й год. :good:
собран за счет сданных молочных/лимонадных бутылок :oops:


Нарушаете правила, батенька...
<Digit>
Аватара пользователя
rig
 
Сообщения: 1437
Зарегистрирован: 03 авг 2007, 19:43
Откуда: Екатеринбург
прог. языки: Си, асм со словарем


Вернуться в Библиотека

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Mail.ru counter