Рекурсия: найти n-ый член последовательности Фибоначчи - Assembler
Формулировка задачи:
Опишите рекурсивную функцию и с помощью этой функции посчитайте n-ый член последовательности Фибоначчи;
Решение задачи: «Рекурсия: найти n-ый член последовательности Фибоначчи»
textual
Листинг программы
- LOCALS
- .model small
- .stack 1000h
- .data
- .code
- main proc
- mov ax, @data
- mov ds, ax
- mov ax, 10
- push ax
- call Fibb
- call Show_AX
- mov ax, 4C00h
- int 21h
- main endp
- Fibb proc N: word
- push bp
- mov bp, sp
- mov ax, N
- cmp N, 2
- ja @@Calc
- mov ax, 1
- pop bp
- ret 2
- @@Calc:
- push bx
- mov ax, N
- dec ax
- push ax
- call Fibb
- mov bx, ax
- mov ax, N
- sub ax, 2
- push ax
- call Fibb
- add ax, bx
- pop bx
- pop bp
- ret 2
- Fibb endp
- ; выводит число из регистра AX на экран
- ; входные данные:
- ; ax - число для отображения
- Show_AX proc
- push ax
- push bx
- push cx
- push dx
- push di
- mov cx, 10
- xor di, di ; di - кол. цифр в числе
- @@Conv:
- xor dx, dx
- div cx ; dl = num mod 10
- add dl, '0' ; перевод в символьный формат
- inc di
- push dx ; складываем в стэк
- or ax, ax
- jnz @@Conv
- ; выводим из стэка на экран
- @@Show:
- pop dx ; dl = очередной символ
- mov ah, 2 ; ah - функция вывода символа на экран
- int 21h
- dec di ; повторяем пока di<>0
- jnz @@Show
- pop di
- pop dx
- pop cx
- pop bx
- pop ax
- ret
- Show_AX endp
- end main
Объяснение кода листинга программы
- Предполагается, что задача программы - вычисление n-го числа Фибоначчи.
- В начале программы переменной
ax
присваивается значение 10, а затем она сохраняется в области данных. - Далее происходит вызов процедуры
Fibb
с аргументомN
. - Если
N
больше 2, то происходит рекурсивный вызов процедурыFibb
с аргументамиN-1
иN-2
. - Если
N
меньше или равно 2, то вax
записывается 1. - После вычисления n-го числа Фибоначчи происходит вызов процедуры
Show_AX
, которая выводит это число на экран. - Процедура
Show_AX
сначала вычисляет количество цифр в числе, затем преобразует число в строку и выводит каждую цифру на экран. - Процедура
Fibb
использует стек для хранения промежуточных результатов. - В конце программы вызывается функция
int 21h
, которая выводит на экран символ, а затем завершает выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д