Форум программистов «Весельчак У»
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
Начало
Наши сайты
Галерея
Весельчак У
Наша Вики
Хранилище
Проекты
Правила
Правила форума
Правила русского языка
Помощь
Поиск
Календарь
Почта
Войти
Регистрация
Форум программистов «Весельчак У»
>
Программирование
>
Ассемблер
(Модератор:
Tuborg
) > Тема:
"возвести в степень"
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: "возвести в степень" (Прочитано 16843 раз)
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
Технический
Администратор
Offline
Пол:
Re: "возвести в степень"
«
Ответ #1 :
03-06-2009 18:01 »
ЛюдMila
,
1. В твоем коде число итераций должно быть на одну меньше. Подумай — почему и как изменить код, чтобы не менять число итераций.
2. Какие числа ты можешь возводить в степень, храня все в 8-битном регистре? Переполнение тебя не волнует? Почитай описание команды "mul"!
3. Можно было бы хранить "A" в регистре...
4. Что значит — "рационально задать цикл"?
«
Последнее редактирование: 03-06-2009 18:03 от RXL
»
Записан
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
ЛюдMila
Гость
Re: "возвести в степень"
«
Ответ #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.
а рационально, значит разумно, как можно короче
Записан
Вад
Команда клуба
Offline
Пол:
Re: "возвести в степень"
«
Ответ #3 :
04-06-2009 13:37 »
Я так понимаю, можно возводить в степень двумя способами. Пусть 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
]
Вверх
Печать
« предыдущая тема
следующая тема »
Форум программистов «Весельчак У»
>
Программирование
>
Ассемблер
(Модератор:
Tuborg
) > Тема:
"возвести в степень"
Загружается...