Assembly 打印时如何删除返回键

Assembly 打印时如何删除返回键,assembly,output,edit,nasm,enter,Assembly,Output,Edit,Nasm,Enter,我试图获取用户名并用问候语显示它,如何在下一行显示问候语时删除回车键 输出如下: Hello! Name How are you? 我需要它是: Hello! Name How are you? 在调用DOS服务之前,您需要写入最大值 lea dx, [ANSNAME] ;get the name mov byte [ANSNAME], 19h ; initialize name 25 chars max mov ah, 0Ah int 21h 设置不带回车和换行代码的输入缓冲区 A

我试图获取用户名并用问候语显示它,如何在下一行显示问候语时删除回车键

输出如下:

Hello!
Name
How are you?
我需要它是:

Hello! Name How are you?

  • 在调用DOS服务之前,您需要写入最大值

    lea dx, [ANSNAME] ;get the name
    mov byte [ANSNAME], 19h ; initialize name 25 chars max
    mov ah, 0Ah 
    int 21h
    
  • 设置不带回车和换行代码的输入缓冲区

    ANSNAME times 2+25 db "$"
    
  • 从问候语中删除回车和换行代码,并在文本后添加空格

    GREET db "Hello! ", "$"
    
  • 在GREET2消息之前添加空格

  • 在打印名称之前,必须删除附加到结果的回车符(0dh)

    mov bl, [ANSNAME+1]
    mov bh, 0
    mov byte [ANSNAME+2+bx], "$"
    lea dx, [ANSNAME+2]
    mov ah, 09h
    int 21h
    

  • 没有。它分为三行的唯一原因是,对于每一行,您不断添加'0dh,0ah',这相当于C中的'\n'。删除这些,它看起来应该很好。

    我在ANSNAME上删除了它,它不起作用,它没有显示名称如果OP的目的是不覆盖输入名称的行,则我可能倾向于在开头添加一个
    0ah
    。OP通过
    call clrsc
    清除屏幕。这不会有什么区别。啊,很好的一点,我很快扫描了代码,但忘记了他通过代码中未声明的函数清除了屏幕。感谢贡献,我得到了这个错误,虽然是在:mov byte ptr[ANSNAME+2+bx],“$”,上面写着逗号、冒号、修饰符或操作数后预期的行尾,非法的command@JedrekFadul我已经编辑了Fifoernik的答案,以符合NASM语法。这比仅删除
    0dh
    0ah
    要复杂一些,因为当名称放在另一个答案也处理的输入缓冲区中时,必须删除名称末尾的回车符。在返回缓冲区中设置长度也有一个错误。
    GREET2 db " How are you?",0dh,0ah,"$"
    
    mov bl, [ANSNAME+1]
    mov bh, 0
    mov byte [ANSNAME+2+bx], "$"
    lea dx, [ANSNAME+2]
    mov ah, 09h
    int 21h