%include "asm_io.inc"
segment .data
segment .bss
segment .text
global asm_main
asm_main:
enter 0,0
pusha
call read_int
push eax
call fak_rekursiv
add esp, 4
call print_int
call print_nl
popa
mov eax, 0
leave
ret
fak_rekursiv:
enter 4, 0
pusha
mov eax, [ebp + 8]
cmp eax, 0
je ergebnis_1
cmp eax, 1
je ergebnis_1
mov ebx, eax
dec ebx
mul ebx
push ebx
call fak_rekursiv
pop ebx
ergebnis:
mov [ebp - 4], eax
ergebnis_1:
mov [ebp - 4], dword 1
popa
mov eax, [ebp - 4]
leave
ret
我正在学习在NASM上编码,我试图通过使用编码阶乘来理解递归,但我很快就被弄糊涂了。
我如何使用NASM中的递归来编写阶乘算法?
2条答案
按热度按时间ep6jt1vc1#
实际上,我之前编写factorial只是为了好玩,现在我已经在我的文件中找到了代码:)在这里,但它更像是一个伪代码,我只是通过调试器单步调试。
在
eax
中放置不同的值,并在调试器中逐步通过它。yfwxisqw2#
不太熟悉NASM,但这里有一个MASM解决方案,它递归地调用阶乘函数。
阶乘.asm
显示从0到12的所有阶乘