汇编语言实现用户输入同一行打印两次遇问题:为何输出分行?
汇编打印输入内容换行问题排查
我正在学习汇编语言中打印用户输入的方法,目标是将输入内容在同一行连续打印两次,但当前编写的代码运行后,输入内容被分两行打印。想请教该问题的原因。
我的代码
dosseg .model small .stack .data prompt1 db "Hello, what's your name?:$" prompt2 db 13,10, "$" strprompt db 30 dup('$') .code main proc mov ax,@data mov ds,ax lea dx,prompt1 mov ah,09h int 21h mov ah,10 lea dx,strprompt mov strprompt,30 int 21h lea dx,prompt2 mov ah,09h int 21h lea dx, strprompt+2 mov ah, 09h int 21h lea dx,prompt2 mov ah,09h int 21h lea dx, strprompt+2 mov ah, 09h int 21h mov ax, 4c00h int 21h main endp end
预期输出(输入姓名后)
namename
实际输出
name name
问题原因
你在两次打印用户输入内容的代码之间,调用了prompt2的打印操作。而prompt2中定义了13,10——这两个ASCII码分别是回车(CR)和换行(LF),执行这个打印就会让光标跳到下一行开头,所以第二次打印输入内容时自然就出现在新行里了。
修复方案
去掉两次打印输入内容之间的prompt2调用,直接连续执行两次strprompt+2的打印;如果需要最终输出后换行,可以在两次打印完成后再调用一次prompt2。
修改后的代码示例:
dosseg .model small .stack .data prompt1 db "Hello, what's your name?:$" prompt2 db 13,10, "$" strprompt db 30 dup('$') .code main proc mov ax,@data mov ds,ax lea dx,prompt1 mov ah,09h int 21h mov ah,10 lea dx,strprompt mov strprompt,30 int 21h lea dx,prompt2 mov ah,09h int 21h ; 连续打印两次输入内容,中间无换行 lea dx, strprompt+2 mov ah, 09h int 21h lea dx, strprompt+2 mov ah, 09h int 21h ; 最后添加换行(可选) lea dx,prompt2 mov ah,09h int 21h mov ax, 4c00h int 21h main endp end
内容的提问来源于stack exchange,提问作者LeNewbiee
相关产品推荐
相关产品推荐

