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

如何编写TASM汇编代码实现输入字符串逐字符换行输出?

实现TASM逐行输出输入字符串的每个字符

没问题,我来帮你调整这段TASM代码,实现输入字符串后逐行输出每个字符的效果。先理清楚原代码的逻辑,再讲具体修改点,最后放完整的可运行代码。

原代码逻辑回顾

原代码的核心流程是:

  • 显示输入提示
  • 读取最多7个字符到nam缓冲区
  • 在缓冲区末尾加$(用于int 21h的09h功能一次性输出整个字符串)
  • 输出提示后直接打印整个字符串

但你需要的是逐个输出字符,每个字符单独占一行,所以核心要把“一次性输出整串”改成“循环逐个输出字符+换行”。

关键修改点

  1. 不需要给输入字符串加$(因为我们不再用09h功能输出整串)
  2. 改用int 21h的02h功能(专门输出单个字符)来打印每个字符
  3. 每输出一个字符后,必须打印回车(0dh)和换行(0ah),实现“逐行”效果
  4. 删掉原代码中未使用的sev变量,精简代码

修改后的完整代码

data segment
    prompt db 0dh,0ah,"Enter your string(7 Chars Max): $"
    nam db 7 dup(?) ; 存储输入的7个字符,无需额外加$
    msg1 db 0dh,0ah,"Your input (each char on new line): $"
data ends

code segment
    assume cs:code,ds:data
START:
    mov ax,data
    mov ds,ax

    ; 显示输入提示
    mov dx,offset prompt
    mov ah,09h
    int 21h

    ; 读取7个字符到nam缓冲区
    lea si,nam
    mov cx,7
et:
    mov ah,01h
    int 21h         ; 读取单个字符并回显到屏幕
    mov [si],al
    inc si
    loop et

    ; 显示输出提示
    mov dx,offset msg1
    mov ah,09h
    int 21h

    ; 逐行输出每个字符
    lea si,nam
    mov cx,7
print_loop:
    mov dl,[si]     ; 将当前字符放入dl寄存器(02h功能要求)
    mov ah,02h
    int 21h         ; 输出单个字符

    ; 输出回车换行,让下一个字符在新行显示
    mov dl,0dh
    mov ah,02h
    int 21h
    mov dl,0ah
    mov ah,02h
    int 21h

    inc si
    loop print_loop

    ; 程序退出
    mov ah,4ch
    int 21h
Code ends
end Start

代码细节说明

  • 输入部分和原代码保持一致:用01h功能读取7个字符,存入nam数组
  • 新增的print_loop循环是核心:
    • 每次从nam中取出一个字符,用02h功能输出
    • 紧接着输出0dh(回车)和0ah(换行),确保每个字符单独占一行
    • 循环7次,覆盖所有输入的字符

运行后,输入Hello(需补够7个字符,或你可以把cx的值改成5来适配5个字符的输入),就能看到每个字符逐行输出的效果了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:38:11