Работа с рекурсивной функцией - Assembler
Формулировка задачи:
Здравствуйте, помогите пожалуйста описать рекурсивную функцию и с помощью этой функции вычислить:
Решение задачи: «Работа с рекурсивной функцией»
textual
Листинг программы
- LOCALS
- .model small
- .stack 1000h
- .data
- .code
- main proc
- mov ax, @data
- mov ds, ax
- mov ax, 3 ;K
- push ax
- mov ax, 5 ;N
- push ax
- call Ank
- call Show_AX
- mov ax, 4C00h
- int 21h
- main endp
- Ank proc N: word, K: word
- push bp
- mov bp, sp
- cmp K, 0 ;если K==0, то результат 1
- jnz @@Calc
- mov ax, 1
- pop bp
- ret 4
- @@Calc:
- mov ax, K ;иначе A(N,K):=(N+1)*A(N-1, K-1)
- dec ax
- push ax
- mov ax, N
- dec ax
- push ax
- call Ank
- inc N
- push dx
- mov dx, 0
- mul N
- pop dx
- pop bp
- ret 4
- Ank 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д