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 КиБ) Скачиваний: 1429

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 КиБ) Скачиваний: 835

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

Vooon » 11 дек 2007, 09:44

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

уж непомню что мы делали на 580ом может и не оказаться нужного :crazy:

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

deeeman » 11 дек 2007, 11:02

можешь конкретно указать раздел, что т оне нашел

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

Vooon » 11 дек 2007, 11:14

так я на конкретный форум линк дал, но требуется регистрация, форум закрыт от анонимов

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

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

Vooon » 11 дек 2007, 11:42

только это асемблер авр-ов (похоже)
а не кр580. врятли это получится легко перенести

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

deeeman » 11 дек 2007, 11:45

а где можно поискать коды для для МП К580?

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

Vooon » 11 дек 2007, 14:57

поищи программы для intel 8080 - на сколько помню кр580 его клон был.
вобще нарыть очень сложно - если где и есть то скорее всего это лабы какой-нибудь добрый человек выложил.

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 раз.

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

rig » 11 дек 2007, 15:30

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


Нарушаете правила, батенька...
<Digit>


Rambler\'s Top100 Mail.ru counter