реклама на сайте
подробности

 
 
> Математический вопрос, Программирование на ассемблере
d7d1cd
сообщение Dec 21 2013, 16:41
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



Привет всем. Я программирую на ассемблере. В моей программе все числа хранятся в 32-х разрядах. Соответственно, математические операции (умножение, деление и прочие), реализованы с помощью функций, которые так же работают с 32-х разрядными числами.
Сейчас возникла такая проблема. Мне необходимо сделать вычисления по следующей формуле: X = A * B / C. Числа A, B, C, X - 32-х разрядные. Результат в Х точно поместится в 32 разряда, но при выполнении операции А*В может получится 64-х разрядное число. Подскажите, возможно ли, не прибегая к использованию 64-х разрядных функций и чисел, выполнить вычисления по формуле?

P.S. Функция деления возвращает 2 результата: частное и остаток. Все числа исключительно положительные.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
PRidon
сообщение Dec 24 2013, 06:18
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 8-10-12
Пользователь №: 73 855



Процессор та какой?
Если умножитель аппаратный, то либо 16х16=32, либо 32х32=64. А 32х32=32 - смысла особого не имеет.

Код
mov.w   R15,&MPY;загружаем 1е операнды (15х13)
mov.w   R13,&OP2
; 3 такта ждать
mov.w   &RESHI,R15; результат
mov.w   &RESLO,&RESHI
mov.w   &MPY ,&MAC;загружаем 2е операнды с суммированием результата (15х12) Если такая форма сработает - все получится. Если нет, готовь еще 4 регистра.
mov.w   R12,&OP2
; 3 такта ждать
add.w    &SUMEXT,R15; учитываем переполнение
mov.w   R14,&MAC;загружаем 3е операнды с суммированием результата (14х13)
mov.w   R13,&OP2
; 3 такта ждать
add.w    &SUMEXT,R15; учитываем переполнение
mov.w   &RESHI,R14   ; записываем результат
mov.w   &RESLO,&RESHI
mov.w   R12,&OP2      ; загружаем 4е операнды с суммированием результата (14х12)
; 3 такта ждать
add.w    &SUMEXT,R14; учитываем переполнение
; тут надо проверить переполнение через SR. И если флаг стоит - inc R15
mov.w   &RESHI,R13  ; опять же результат
mov.w   &RESLO,R12  ; и последний результат

Проверить возможности нет. Но мысля что будет работать.
Сработает если после чтения регистров RESLO и RESHI они обнуляются, в UG про это ничего не написано. Так же не очень понятно по какому принципу будет определяться 1й операнд. Если по последней записи, то должно работать.
зы: и да, на умножение нужно 3 такта. Не стоит забывать про это, особенно на асе.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- d7d1cd   Математический вопрос   Dec 21 2013, 16:41
- - Xenia   Цитата(d7d1cd @ Dec 21 2013, 20:41) ... н...   Dec 21 2013, 16:55
|- - d7d1cd   Цитата(Xenia @ Dec 21 2013, 20:55) Откуда...   Dec 21 2013, 17:11
- - lekintr   Цитата(d7d1cd @ Dec 21 2013, 20:41) Резул...   Dec 21 2013, 17:15
- - d7d1cd   Ну вообще то под словами "результат в Х...   Dec 21 2013, 17:37
|- - kovigor   Цитата(d7d1cd @ Dec 21 2013, 20:37) Ну во...   Dec 21 2013, 19:20
|- - d7d1cd   Цитата(kovigor @ Dec 21 2013, 23:20) А чт...   Dec 22 2013, 06:26
- - Егоров   Хм.. так 32 разряда - точность. Умножайте спокойно...   Dec 21 2013, 21:53
- - PRidon   Ну есть один вариант. Делал похожее умножение на 8...   Dec 23 2013, 07:38
|- - d7d1cd   Цитата(PRidon @ Dec 23 2013, 11:38) Ну ес...   Dec 23 2013, 17:34
|- - d7d1cd   Цитата(PRidon @ Dec 23 2013, 11:38) Пусть...   Dec 24 2013, 14:28
- - PRidon   Это обычное умножение столбиком. Что переполняется...   Dec 25 2013, 04:57
- - d7d1cd   Итак, умножению иною реализовано. Вот код: Код//**...   Dec 25 2013, 17:40
- - PRidon   как разберешься с делением - выложи результат. Пол...   Dec 26 2013, 05:31
- - demiurg_spb   Я бы, прежде чем изобретать велосипед, ознакомился...   Dec 26 2013, 06:19
- - d7d1cd   Цитата(PRidon @ Dec 26 2013, 09:31) как р...   Dec 26 2013, 11:10


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th August 2025 - 00:13
Рейтинг@Mail.ru


Страница сгенерированна за 0.0346 секунд с 7
ELECTRONIX ©2004-2016