2015-10-10 5 views
1

Я пытаюсь получить имя пользователя и отобразить его с приветствием, как я могу удалить возвращаемый ключ, когда он отображает приветствие на следующей строке?Как удалить возвращаемый ключ при печати

Вывод таков:

Hello! 
Name 
How are you? 

Мне нужно, чтобы это было:

Hello! Name How are you? 

.

lea dx, [ANSNAME] ;get the name 
    mov ah, 0Ah 
    int 21h 

    mov byte [ANSNAME], 19h ; initialize name 25 chars max 

    call CLRSCR 

    lea dx, [GREET] 
    mov ah, 09h 
    int 21h 

    lea dx, [ANSNAME+2] 
    mov ah, 09h 
    int 21h 

    lea dx, [GREET2] 
    mov ah, 09h 
    int 21h 

    SECTION .data 

    nextline db 0dh, 0ah, "$" 
    ANSNAME times 25 db "$",0dh, 0ah,"$" 
    GREET db "Hello!",0dh,0ah,"$" 
    GREET2 db "How are you?",0dh,0ah,"$" 
+0

Я удалил его на ANSNAME, он не работал, он не отображал имя. –

ответ

2
  1. Вы должны написать максимальное значение перед тем вызова службы DOS!

    lea dx, [ANSNAME] ;get the name 
    mov byte [ANSNAME], 19h ; initialize name 25 chars max 
    mov ah, 0Ah 
    int 21h 
    
  2. Установка входного буфера без кодов возврата каретки и перевода строки.

    ANSNAME times 2+25 db "$" 
    
  3. Снимите возврат каретки и перевод строки кодов из ГРЕЕТ сообщения и добавить пробел после текста.

    GREET db "Hello! ", "$" 
    
  4. Добавить пробел перед сообщением GREET2.

    GREET2 db " How are you?",0dh,0ah,"$" 
    
  5. Перед тем, как можно напечатать имя, которое вы должны удалить возврат каретки (0Dh), что DOS добавляется к результату.

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

Возможно, я склонен добавить '0ah' в начало _GREET_, если намерение OP не перезаписать строку, где имя было введено. –

+0

OP очищает экран через 'вызов CLRSCR'. Это не изменит ситуацию. – Fifoernik

+0

Хорошо, я быстро просмотрел код и забыл, что он очистил экран через функцию, не объявленную в коде. –

-1

Неа. Единственная причина, по которой это происходит в трех строках, заключается в том, что для каждой строки вы добавляете «0dh, 0ah», что эквивалентно «\ n» в C. Удалите их, и это должно выглядеть нормально.

+1

Это немного сложнее, чем удаление только '0dh' и' 0ah', так как вы должны удалить возврат каретки с конца имени, когда он помещен во входной буфер, к которому относится и другой ответ. Существует также ошибка с настройкой длины в буфере возврата. –