Вопрос № 42486: Всем привет, мне срочно нужна прога" вычисление совершенных чисел от 1 до n" выполненная через макросы Помогите пожалуста скоро сессия
..
Вопрос № 42.486
Всем привет, мне срочно нужна прога" вычисление совершенных чисел от 1 до n" выполненная через макросы Помогите пожалуста скоро сессия
Отправлен: 09.05.2006, 00:55
Вопрос задала: Mimansa (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Пан Павел Константинович
Здравствуйте, Mimansa!
Начинаются сессии и это хорошо, потому что это признак конца, и начала отдыха.
> Всем привет, мне срочно нужна прога" вычисление совершенных чисел от 1 до n" выполненная через макросы Помогите пожалуста скоро сессия.
>> Давайте попробуем.
Построем наш алгоритм вот таким путём:
Задачи.
1. n = 29
3. Сохраним колл-во совершенных чисел.
Алгоритм:
Мы знаем что в промежутке от 1 до 29, есть два совершенных числа, это 6 и 28, т.е.
колл-во совершенных чисел равно двум. Вот код который это показывает:
CSEG segment
assume cs:CSEG,ds:CSEG,ss:CSEG,es:CSEG
org 100h
Begin:
;от 1 до n, n = 29
;=============================================
mov cx,29 ;n = 0ah
mov ax,02h ;begin num
;=============================================
@1:
mov byte ptr [Name_A],00h
mov bl,01h ;num 1...n
@4:
push ax
div bl
cmp ah,00h
jne @@2
;=============================================
add byte ptr [Name_A],bl
@2:
inc bl
;=============================================
pop ax
cmp bl,al
jne @@4
;=============================================
cmp byte ptr [Name_A],al
jne @@3
;=============================================
add byte ptr [Count],01h
@3:
inc ax
loop @@1
;=============================================
mov cl,byte ptr [Count]
;=============================================
ret ;exit
;=============================================
Name_A db 00h
Count db 00h
;=============================================
CSEG ends
end Begin
Код !НЕ! оптимизирован ни по объму и ни по быстродействию, рекомендую сделать это вам.
Код не использует спец. инструкций так что суть понять можно без комментриев.
Все рассуждения велись относительно докуменда по этому адресу: