如何编写TASM汇编代码实现输入字符串逐字符换行输出?
实现TASM逐行输出输入字符串的每个字符
没问题,我来帮你调整这段TASM代码,实现输入字符串后逐行输出每个字符的效果。先理清楚原代码的逻辑,再讲具体修改点,最后放完整的可运行代码。
原代码逻辑回顾
原代码的核心流程是:
- 显示输入提示
- 读取最多7个字符到
nam缓冲区 - 在缓冲区末尾加
$(用于int 21h的09h功能一次性输出整个字符串) - 输出提示后直接打印整个字符串
但你需要的是逐个输出字符,每个字符单独占一行,所以核心要把“一次性输出整串”改成“循环逐个输出字符+换行”。
关键修改点
- 不需要给输入字符串加
$(因为我们不再用09h功能输出整串) - 改用
int 21h的02h功能(专门输出单个字符)来打印每个字符 - 每输出一个字符后,必须打印回车(
0dh)和换行(0ah),实现“逐行”效果 - 删掉原代码中未使用的
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
相关产品推荐
相关产品推荐

