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

汇编语言实现用户输入同一行打印两次遇问题:为何输出分行?

汇编打印输入内容换行问题排查

我正在学习汇编语言中打印用户输入的方法,目标是将输入内容在同一行连续打印两次,但当前编写的代码运行后,输入内容被分两行打印。想请教该问题的原因。

我的代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 08:12:25