Выполнение арифметических операций c целыми числами
На сайте http://www.atmel.com предлагаются разработанные специалистами фирмы Atmel подпрограммы целочисленного умножения и деления для 8-ми 16-ти разрядных чисел. В данной статье рассматриваются используемые в этих программах алгоритмы. В приложении приводятся тексты программ для 8-разрядных чисел. Программы для 16-разрядных чисел строятся аналогично. Большинство предлагаемых программ выполнено в двух вариантах. Первый оптимизирован с точки зрения длины результирующего программного кода, а второй – с точки зрения времени исполнения.
Привет тебе! наткнулся на твою тему, т к очень нужно реализовать подобное... а именно Программу для умножения двух 16-разрядных чисел без знака на языке ассемблера МП К580.
Описание задачи: Умножение двоичных чисел представляет последовательность операций сдвига и сложения (аналогично умножению «в столбик» десятичных чисел). Шестнадцатиразрядные числа занимают два байта, поэтому целесообразен следующий алгоритм: - загружаем множимое в пару регистров DE, множитель – в пару регистров BC, результат будет храниться в паре регистров HL. - умножаем множимое сначала на младший байт множителя, потом – на старший байт, для этого: - загружаем в регистр А значение регистра С. - регистр С обнуляем, и в дальнейшем используем в качестве счетчика - в регистр С заносим значение 8 (00001000). - организуем цикл: при каждом обороте цикла анализируем разряды множителя, начиная с его старшего разряда. В соответствии с этим частичные произведения будут формироваться, начиная со старшего частичного произведения. Накопление суммы частичных произведений будем производить в паре регистров HL, то есть к содержимому предварительно сброшенной в нуль пары регистров HL вначале прибавим восьмое частичное произведение; затем, сдвинув на один разряд влево содержимое пары регистров HL, прибавим седьмое частичное произведение, и так далее, пока не будут просуммированы все частичные произведения. После этого уменьшаем значение счетчика (регистра C) на единицу. Цикл выполняем до тех пор пока значение регистра С не станет равным нулю. - сдвигаем на один разряд влево содержимое регистров HL, загружаем в регистр A значение регистра В, устанавливаем значение регистра С в 8, и повторяем цикл: то есть производим умножение на старший байт. - записываем полученное произведение – значение пары регистров HL - в оперативную память.
Следует учесть, что если полученное произведение будет более, чем шестнадцатиразрядным, то старшие разряды будут отброшены.
Буду рад получить от тебя какие нибудь комментарии, помощь, или как найти материал по этой теме.
;********************************************************************** ;1. Текст программы mpy8u_c умножения 8-и разрядных целых беззнаковых ;чисел, оптимизированной с точки зрения кода. ;********************************************************************** ;*****Использование регистров
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
поищи программы для intel 8080 - на сколько помню кр580 его клон был. вобще нарыть очень сложно - если где и есть то скорее всего это лабы какой-нибудь добрый человек выложил.
ухты куда капнули КР 580 й , у меня на полках где-то пылится "Орион 128" продолжение развития "РК-86" с дополнительным банком озу и адаптером дисковода. самодельным БП, клавиатурой. школа 8-9 класс 88-89-й год. собран за счет сданных молочных/лимонадных бутылок