Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: "возвести в степень"  (Прочитано 16840 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ЛюдMila
Гость
« : 03-06-2009 14:59 » 

В debug вычислить A^m (A в степени m), как рационально задать цикл?
….
Например, в ячейку памяти вводим A, в следующую ячейку m
Вот что сама придумала. Но результат получается на показатель больше…

Mov bx,400
Mov ax,[bx]
Mov cx,[bx+2]
M1: Mov dl,[bx]
Mul dl
Loop M1
hlt
….
Где же, что в листинге исправить?
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 03-06-2009 18:01 » 

ЛюдMila,

1. В твоем коде число итераций должно быть на одну меньше. Подумай — почему и как изменить код, чтобы не менять число итераций.
2. Какие числа ты можешь возводить в степень, храня все в 8-битном регистре? Переполнение тебя не волнует? Почитай описание команды "mul"!
3. Можно было бы хранить "A" в регистре...
4. Что значит — "рационально задать цикл"?
« Последнее редактирование: 03-06-2009 18:03 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
ЛюдMila
Гость
« Ответ #2 : 04-06-2009 13:12 » 

спасибо, изменила код
Mov bx,400
Mov ax,1
Mov cx,[bx+2]
M1: Mov dx,[bx]
imul dx
Loop M1
hlt

все верно считается. результат хранится в AX.
исходные данные - (по условию) небольшие числа, до A, но решила использовать регистр DX, и команду imul.
а рационально, значит разумно, как можно короче Улыбаюсь
Записан
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 04-06-2009 13:37 » new

Я так понимаю, можно возводить в степень двумя способами. Пусть x - это число, n - искомая степень. Тогда варианты такие:
1. На каждом шаге p(i)=p(i-1)*x, i = 2..n, p(1) = x;
2. Хитро разбить n, чтобы минимизировать число умножений.
Скажем, если n = 4, то можно же сделать всего 2 умножения, а не 3: p(2) = p(1)*p(1); p(4) = p(2)*p(2);
Если n=7, то p(7) = p(4)*p(2)*p(1) = (p(2)*p(2)) * p(2) * p(1) - итого, 4 умножения вместо 7.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines