Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.85/26: Рейтинг темы: голосов - 26, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 27.09.2009
Сообщений: 3
1

Функция без операций умножения и деления

27.09.2009, 17:43. Показов 4754. Ответов 31
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приветствую всех... Парни, помогите с лабой...
задание: нужно реализовать функцию без операций умножения и деления..., т.е использовать сдвиги и тд! Вот функция: y=(3*(a-b)^2)/4 . Заранее спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.09.2009, 17:43
Ответы с готовыми решениями:

Приоритет операций умножения и деления..
Здравствуйте..!! Помогите пожалуйста определиться.. Нужно посчитать выражение y = a - b + c / d *...

Реализация операций умножения и деления используя команды сдвига
Необходимо умножить целое ЗНАКОВОЕ у число в дополнительном коде на правильную дробь: V = y * a /...

Как реализовать преобразование упакованных чисел в неупакованные для операций деления и умножения?
Здравствуйте! Подскажите как реализовать преобразование упакованных чисел в неупакованные для...

Перегрузка операций умножения и деления
Создать класс "Строка текста с числами". Переопределить операции умножения и деления, так чтобы...

31
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
27.09.2009, 17:54 2
И в чем проблема? Вспоминаем математику и ВЫЧИТАЕМ, СКЛАДЫВАЕМ несколько раз и СДВИГАЕМ.
0
0 / 0 / 0
Регистрация: 27.09.2009
Сообщений: 3
27.09.2009, 17:58  [ТС] 3
Я все помню... но проблема в том, что я ассемблер не знаю...(синтаксис и тд) Я на с++ рабил!
0
28 / 25 / 1
Регистрация: 28.07.2009
Сообщений: 109
27.09.2009, 18:01 4
Напиши на C++ без умножения и деления и загляни в листинг
0
0 / 0 / 0
Регистрация: 27.09.2009
Сообщений: 3
27.09.2009, 18:10  [ТС] 5
Я уже писал на с++, опять же проблема заключается в делении... Я через циклы делал и все! А тут же двоичное представление, сдвиги! Парни, если это легко(как вы говорите), может поможите! Я в долгу не останусь!
0
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
27.09.2009, 18:27 6
Стучи в аську. номер есть в профиле.
0
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
27.09.2009, 19:40 7
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
386
.model flat,stdcall
option casemap:none
.data 
DWORD a 2
DWORD b 3
DWORD rez ?
.code
main:  ;rez=(3*(a-b)^2)/4      
        mov eax, a 
        sub eax, b
        mov ebx, eax
        shl eax, 2 ;умножаем на 4
        sub eax, ebx ;вычитаем, чтоб получить 3*(а-b)
        shr eax, 2 ; делим на 4
        mov rez, eax 
end main
Парни может поможете сделать вывод на экран? Хотя может сам допишу
0
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
27.09.2009, 19:53 8
galileopro, что-то не то это считает. С твоими числами, получается какое-то грандиозное число в ответе
0
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
27.09.2009, 20:16 9
Assembler
1
DWORD a 10
Добавлено через 1 минуту
Там с отрицательным числом проблемы. Если a<b

Добавлено через 1 минуту
Попробй а 10
0
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
27.09.2009, 20:59 10
Нет. Должно быть 36, а выдает 5

Добавлено через 5 минут
Пообщались с TC по аське... Короче все решили
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
27.09.2009, 21:09 11
2galileopro - забыл возвести в квадрат !
0
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
27.09.2009, 22:07 12
Да я заметил. Я понял, что Вы все решили, просто хочу доделать Вы не против?
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
27.09.2009, 22:09 13
Конечно доделай !
Заодной сравним - может топикастер накосячил
0
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
27.09.2009, 22:12 14
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
386
.model flat,stdcall
option casemap:none
.data 
DWORD a 2
DWORD b 3
DWORD rez ?
.code
main:  ;rez=(3*(a-b)^2)/4      
        mov eax, a 
        sub eax, b
        mov ebx, eax
        shl eax, 2 ;умножаем на 4
        sub eax, ebx ;вычитаем, чтоб получить 3*(а-b)
        mov ecx, eax
m1:
inc eax
loop m1
        shr eax, 2 ; делим на 4
        mov rez, eax 
end main
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
27.09.2009, 22:20 15
Все равно не вижу возведения в 2-ую степень ?
И умножение на 3 можно сделать как a+(a<<1)
а не как ты (a<<2)-a

Добавлено через 1 минуту
Кстати - ХА!
А как возвести во вторую степень без умножения.
Это придется извращаться ...
0
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
27.09.2009, 22:31 16
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
386
.model flat,stdcall
option casemap:none
.data 
DWORD a 2
DWORD b 3
DWORD rez ?
.code
main:  ;rez=(3*(a-b)^2)/4      
 mov eax, a 
sub eax, b
mov ebx, eax
mov ecx, eax
dec ecx
m1:
add eax, ebx
loop m1
mov ebx, eax
shl eax, 1 ;умножаем на 2
add eax, ebx ;прибавляем, чтоб получить 3*(а-b)
shr eax, 2 ; делим на 4
mov rez, eax       
end main
1
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
27.09.2009, 22:34 17
Возводится без проблем, главное помнить, что степень, это умножение, а умножение это сложение
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
27.09.2009, 22:36 18
Вроде правильно - но запустить и проверить не помешает
А еще можно ускорить умножение - но это уже оптимизация

Добавлено через 1 минуту
Goodwin98: Только умножать на 100000 с помощью сложения будет несколько долго
0
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
27.09.2009, 22:45 19
Цитата Сообщение от odip Посмотреть сообщение
А еще можно ускорить умножение - но это уже оптимизация
Кстати да. Можно. А пример "на пальцах" привести можете?

Добавлено через 36 секунд
ну скажем 8^2=...
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
27.09.2009, 22:51 20
Например умножить A*57
57=32+16+8+1
Если есть число A, то как получить A, 2A, 4A, 8A и так далее понятно - с помощью сдвига !
Значит A*57=(A+8A+16A+32A).

Ну а если научился умножать A на любое B - то уже умножить A на A не составит труда
0
27.09.2009, 22:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.09.2009, 22:51
Помогаю со студенческими работами здесь

Реализация операций умножения и деления используя команды сдвига
Необходимо умножить целое БЕЗЗНАКОВОЕ число x на правильную дробь: Z = x * a / b. a и b – целые...

Не используя операций умножения и деления, найти длину незанятой части отрезка A
Даны положительные числа A и B (A&gt;B). На отрезке длины A размещено максимально возможное количество...

Найти значение выражения. Для операций умножения и деления использовать сдвиг влево и вправо
Найти значение выражения. Для операций умножения и деления использовать сдвиг влево и вправо....

Цикл с условием: не используя операций умножения и деления, найти длину незанятой части отрезка А
5. Цикл с условием:Даны положительные числа А и В (А&gt;B). На отрезке длины А размещено максимально...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru