2015-10-10 85 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消息回車和換行碼和文本之後添加一個空格。

    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

如果OP的意圖是不覆蓋其中的行,我可能傾向於在開頭_GREET_添加一個'0ah'名稱已輸入。 –

+0

OP通過調用CLRSCR來清除屏幕。它不會有所作爲。 – Fifoernik

+0

好的一點,我很快掃描了代碼,並忘記了他通過未在代碼中聲明的函數清除屏幕。 –

-1

都能跟得上。三行的唯一理由是因爲每一行你都會添加'0dh,0ah',這相當於C中的'\ n'。刪除它們,它應該看起來很好。

+1

這比刪除「0dh」和「0ah」要複雜一點,因爲當名稱放在輸入緩衝區中時,必須從名稱末尾刪除回車,而其他答案也會處理該回車。在返回緩衝區中設置長度也有一個問題。 –