;使用函数递归求阶乘 3 ;事实 (n) = n * 事实 (n-1)(n > 0
)节.text 全局_开始
_开始:
mov bx, 3 ; 3 是阶乘极限 调用 proc_fact 添加斧头,30小时 mov [事实], ax
mov edx, len;打印消息 mov ecx, 消息 移动 ebx, 1 移动 eax, 4 持续 80 小时
mov edx, 1 ;打印阶乘 mov ecx,事实 移动 ebx, 1 移动 eax, 4 持续 80 小时
mov eax, 1 ;出口 持续 80 小时
过程事实: CMP BL,1 ;计算下一个数字的阶乘的循环 jg do_计算 移动斧头,1 ret
计算: 十二月 BL ;将 bl 减 1 以用于下一个数字 (n-1) 调用 proc_fact ;处理下一个阶乘 公司 BL ;将 bl 加 1 以用于下一个数字 (n) 穆尔 BL ;斧头 = 阿尔 * BL ret
.data 部分 msg db“阶乘 3 是:” len equ $ - 味精
.bss 节 事实 resb 1
我什么也没尝试过,因为我在这方面非常糟糕,所以一些专业将不胜感激。
您似乎正在为 32 位 x86 Linux 使用 nasm。在这种情况下,您可能希望使用 read 系统调用从 STDIN 加载输入。
代码会是这样的:
mov eax, 3 ; read syscall number
mov ebx, 0 ; STDIN file descriptor
mov ecx, fact ; buffer to store input
mov edx, 1 ; number of bytes to load
在此示例中,数字被加载到
fact
中,但您可能想在 .bss
中为其创建一个单独的缓冲区。