Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2007, 09:24   #1
deeeman
Новичок
Джуниор
 
Регистрация: 11.12.2007
Сообщений: 2
По умолчанию умножение 16-разрядных чисел

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


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

Следует учесть, что если полученное произведение будет более, чем шестнадцатиразрядным, то старшие разряды будут отброшены.
Вложения
Тип файла: doc kr.doc (47.5 Кб, 36 просмотров)
deeeman вне форума Ответить с цитированием
Старый 11.12.2007, 10:37   #2
deeeman
Новичок
Джуниор
 
Регистрация: 11.12.2007
Сообщений: 2
По умолчанию

у меня есть для 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
deeeman вне форума Ответить с цитированием
Старый 11.12.2007, 19:49   #3
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Код:
chislo dw 45
.......
      mov ax, [chislo]
      imul ax, 8
в ax результат умножения
rpy3uH вне форума Ответить с цитированием
Старый 12.12.2007, 13:26   #4
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Ну да, не всё так просто, это ж типа микроконтроллера, тут вообще всё по-другому и регистры кажись восьмиразрядные.
Поставил только что эмуль, поиграться. Нифига не разобрался Если это того, что надо эмуль вообще.
Вложения
Тип файла: zip EML580.zip (20.4 Кб, 37 просмотров)
пыщь
JTG вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
умножение PAWLO1993 Паскаль, Turbo Pascal, PascalABC.NET 4 29.07.2008 18:55
Умножение в SQL Родион БД в Delphi 4 12.06.2008 17:27
Умножение длинных целых чисел Rifler Паскаль, Turbo Pascal, PascalABC.NET 1 04.06.2008 21:12
Умножение и деление StiTch_Parazit Помощь студентам 10 20.05.2008 14:32
вычисление суммы чисел, кратных 3 из последовательности, состоящей из 10 чисел, заранее заданных Белка Помощь студентам 3 27.10.2007 11:53