You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在NASM中获取用户输入并实现阶乘计算程序

实现用户输入数字并计算阶乘的汇编程序

你的现有代码已经实现了递归计算阶乘的核心逻辑,但目前是硬编码计算3的阶乘,以下是修改后的代码,新增用户输入功能,并适配通用数字的阶乘计算:

修改后的完整代码

; 递归实现用户输入数字的阶乘计算
; 支持输入范围:1-9(超出会溢出或结果不正确)
; Fact(n) = n * fact(n-1) (n>0)

section .text
global _start

_start:
    ; 提示用户输入数字
    mov edx, prompt_len
    mov ecx, prompt
    mov ebx, 1
    mov eax, 4
    int 80h

    ; 读取用户输入(最多1字节,即单个数字)
    mov edx, 1
    mov ecx, input_buf
    mov ebx, 0
    mov eax, 3
    int 80h

    ; 将ASCII码转换为数值(输入字符-'0')
    mov bl, [input_buf]
    sub bl, 30h

    ; 调用阶乘计算函数
    call proc_fact

    ; 将计算结果转换为ASCII码
    add ax, 30h
    mov [fact], ax

    ; 输出结果提示
    mov edx, result_msg_len
    mov ecx, result_msg
    mov ebx, 1
    mov eax, 4
    int 80h

    ; 输出阶乘结果
    mov edx, 1
    mov ecx, fact
    mov ebx, 1
    mov eax, 4
    int 80h

    ; 输出换行符
    mov edx, 1
    mov ecx, newline
    mov ebx, 1
    mov eax, 4
    int 80h

    ; 退出程序
    mov eax, 1
    int 80h

; 递归阶乘计算函数
; 输入:bl = 要计算阶乘的数字n
; 输出:ax = n的阶乘结果
proc_fact:
    cmp bl, 1        ; 递归终止条件:n=1时返回1
    jg do_calculation
    mov ax, 1
    ret

do_calculation:
    dec bl           ; n = n-1
    call proc_fact   ; 递归计算fact(n-1)
    inc bl           ; 恢复n的值
    mul bl           ; ax = ax * bl (即fact(n-1)*n)
    ret

section .data
prompt db "请输入一个1-9的数字:"
prompt_len equ $ - prompt

result_msg db "该数字的阶乘是:"
result_msg_len equ $ - result_msg

newline db 0xA  ; 换行符

section .bss
input_buf resb 1  ; 存储用户输入的字符
fact resb 1       ; 存储阶乘结果(ASCII码)

关键修改点说明

  • 新增用户输入逻辑:使用read系统调用读取用户输入的单个数字,将ASCII码转换为数值后传入阶乘函数。
  • 通用化提示信息:替换原固定的3的阶乘提示,改为引导输入和通用结果提示。
  • 结果输出优化:新增换行符,让输出格式更整洁。
  • 保留递归核心:原有的递归阶乘计算逻辑完全保留,仅修改了输入源。

注意事项

  • 目前代码仅支持1-9的数字输入,因为阶乘结果用1字节存储(ASCII码形式),超过9的阶乘结果会溢出(比如10!是362880,远大于单字节能存储的范围)。如果需要支持更大数字,需要修改结果存储方式为多字节,并实现多字节数字的ASCII转换和输出。
  • 编译运行方式:使用nasm -f elf32 factorial.asm -o factorial.o编译,再用ld -m elf_i386 factorial.o -o factorial链接,最后运行./factorial即可测试。

内容的提问来源于stack exchange,提问作者Kennex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 07:40:22