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

汇编程序输入输出问题:实现姓名、年龄、国家的输入与输出

汇编程序修复与扩展:实现姓名、年龄、国家的输入输出

原程序问题分析

  • 输入缓冲区格式不符合要求:int 21h的ah=10(0Ah)字符串输入功能,要求缓冲区必须是「第一个字节存最大输入长度,第二个字节存实际输入长度,后续字节存输入字符」的结构,原程序直接用dup('$')定义缓冲区,导致输入逻辑异常。
  • 变量操作错误:年龄输入时错误修改了姓名缓冲区Arr的长度,且操作方式不符合缓冲区规范。
  • 缺少输出逻辑:仅实现姓名输出,未处理年龄的输出,更没有国家输入输出的相关代码。

修复并扩展后的完整代码

data segment
    ; 输入提示字符串
    str1 db "What is your name: $"   
    str2 db "How old are you? $"
    str3 db "Which country are you from? $"
    ; 输出前缀字符串
    str4 db 13,10, "Name Output is: $"
    str5 db 13,10, "Age Output is: $"
    str6 db 13,10, "Country Output is: $"

    ; 输入缓冲区遵循0Ah功能格式:[最大长度][实际长度][字符存储区]
    name_buf db 10, ?, 10 dup('$')   ; 最多输入9个字符(留1位给结束符)
    age_buf db 4, ?, 4 dup('$')      ; 最多输入3个字符(适配年龄范围)
    country_buf db 15, ?, 15 dup('$'); 最多输入14个字符
ends

stack segment
    dw 128 dup(0)    
ends

code segment
start:
    mov ax, @data
    mov ds, ax   

    ; 输入姓名
    lea dx, str1
    mov ah, 09h
    int 21h
    mov ah, 0Ah
    lea dx, name_buf
    int 21h
    call print_newline

    ; 输入年龄
    lea dx, str2
    mov ah, 09h
    int 21h
    mov ah, 0Ah
    lea dx, age_buf
    int 21h
    call print_newline

    ; 输入国家
    lea dx, str3
    mov ah, 09h
    int 21h
    mov ah, 0Ah
    lea dx, country_buf
    int 21h
    call print_newline

    ; 输出姓名
    lea dx, str4
    mov ah, 09h
    int 21h
    call print_buffer, name_buf

    ; 输出年龄
    lea dx, str5
    mov ah, 09h
    int 21h
    call print_buffer, age_buf

    ; 输出国家
    lea dx, str6
    mov ah, 09h
    int 21h
    call print_buffer, country_buf

    ; 退出程序
    mov ax, 4c00h
    int 21h

; 辅助子程序:打印换行符
print_newline proc
    mov dl, 13
    mov ah, 02h
    int 21h
    mov dl, 10
    mov ah, 02h
    int 21h
    ret
print_newline endp

; 辅助子程序:打印0Ah格式的缓冲区内容
print_buffer proc
    push bp
    mov bp, sp
    mov si, [bp+4]
    ; 在输入字符末尾添加$,适配09h输出功能
    mov cl, [si+1]
    mov ch, 0
    add si, 2
    add si, cx
    mov byte ptr [si], '$'
    ; 输出字符串
    lea dx, [bp+4]
    add dx, 2
    mov ah, 09h
    int 21h
    call print_newline
    pop bp
    ret 2
print_buffer endp
ends
end start

关键修改说明

  • 标准化输入缓冲区:严格按照int 21h 0Ah功能要求定义缓冲区,避免输入逻辑错误。
  • 新增辅助子程序:把重复的换行、输出逻辑封装成子程序,减少冗余代码,提升可读性。
  • 扩展功能:新增国家的输入提示、缓冲区及输出逻辑,满足需求。
  • 修复变量错误:移除原程序中错误的缓冲区长度赋值操作,让0Ah功能自动处理实际输入长度的填充。

内容的提问来源于stack exchange,提问作者John Paulo Pascua

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 20:34:50