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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2012, 23:02   #1
Hrum
 
Регистрация: 28.10.2012
Сообщений: 9
По умолчанию Нахождение значения выражения, используя три операции

Нахождение значения выражения N^7, используя три операции умножения.

Спасибо!
Hrum вне форума Ответить с цитированием
Старый 29.10.2012, 04:02   #2
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Hrum
ну вряд ли это возможно за три операции умножения, вот так можно получить N^8
Код:
mov eax,N
mul eax; eax=N^2
mul eax; eax=(N^2)^2=N^4
mul eax; eax=(N^4)^2=N^8
а вот так можно получить N^6
Код:
mov eax,N
mov ecx,eax
mul eax; eax=N^2
mul ecx; eax=N^2*N=N^3
mul eax; eax=(N^3)^2=N^6
Mikl___ вне форума Ответить с цитированием
Старый 29.10.2012, 09:12   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Mikl___
ну вряд ли это возможно за три операции умножения, вот так можно получить N^8
а может, три операции умножения и одна деления, про деление ничего не сказано!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.10.2012, 12:21   #4
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Serge_Bliznykov
Я об этом думал
Код:
mov eax,N
mov ecx,eax
mul eax; eax=N^2
mul eax; eax=(N^2)^2=N^4
mul eax; eax=(N^4)^2=N^8
div ecx; eax=N^8/N=N^7
но это как-то "кузяво"
Mikl___ вне форума Ответить с цитированием
Старый 29.10.2012, 14:11   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Mikl___
Я об этом думал
....
но это как-то "кузяво"
полностью согласен! совсем некузявно!
Поэтому я и поставил смайлик в конце своего не совсем серьёзного предложения!


Был бы рад услышать от Hrum, какой же ответ ожидался преподавателем!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.10.2012, 10:03   #6
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Serge_Bliznykov
используем "некузявый" вариант быстрого возведения в степень,
Код:
int power(int t, int k) // возведение t в степень k
{
  int res = 1;
  while (k) 
      {
        if (k & 1) 
           res *= t;
        t *= t;
        k >>= 1;
      }
  return res;
}
пользуемся тем, что семерка в двоичном виде это только единички (7dec=111bin), упрощаем всё что только можно, но всёравно для возведения в седьмую степень требуется четыре умножения, интересно увидеть какой-нибудь другой вариант
Код:
.data
res	dd ?;5^7=78125=1312Dh
t	dd 5
.code
        mov eax,t
	mov ebx,eax
	imul ebx,ebx; ebx=t^2
	mul ebx; eax=t^3
	imul ebx,ebx; ebx=t^4
	mul ebx; eax=t^7
	mov res,eax

Последний раз редактировалось Mikl___; 30.10.2012 в 12:56.
Mikl___ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как разбить строку на три целочисленных значения в С? NoviceBeginner Общие вопросы C/C++ 3 16.09.2012 13:38
Используя рекурсию, вычислить результат арифметического выражения??? Nataly026 Паскаль, Turbo Pascal, PascalABC.NET 4 09.03.2012 21:36
Используя только операции сложения и вычитания, найти частное от деления нацело N на K, а также остаток Nipuh Паскаль, Turbo Pascal, PascalABC.NET 2 30.05.2011 13:52
нужно в edit точку заменить запятой используя регулярные выражения Pasha1983 Общие вопросы Delphi 7 02.04.2010 13:12