想在第一行输入后在下一行输出(汇编语言)

Want Output in next line After inputing in the first line(Assembly Language)

我正在用汇编语言编写一个程序,将十进制数(来自用户)转换为十六进制数。我快完成了,但我遇到了一个问题。基本上问题是我正在接受一个输入(十进制)而不是将其转换为十六进制并打印它但是我的输出替换了输入值并在同一行中显示输出。我需要帮助来解决这个问题。我还在下面附上了我的代码。

.model small
.stack 100h
.data
Menu db 10, 13, 'Enter a choice (1 or 2):'
     db 10, 13, '1) Convert 1 to 5 Decimal values to Hex'
     db 10, 13, '2) Quit Program', 10, 13, '$'

MenuInputError db 10, 13, 'Choice must be a 1, 2, or 3!'
               db 10, 13, 'Try again!', 10, 13, '$'

Decimal db 10, 13, 'Enter a number with 1 to 5 digits: ', 10, 13, '$'

.code
    Main proc
    mov ax,@data
    mov ds,ax
    
    DisplayMenu:
    mov dx,OFFSET Menu
    mov ah,9
    int 21h
    mov ah,1
    int 21h
    
    CMP al,'1'
    JL DisplayError
    
    CMP al, '3'
    JG DisplayError
    
    CMP al,'1'
    JE Dec2Hex
    
    CMP al,'2'
    JE Quit
    
    DisplayError:
    mov dx, OFFSET MenuInputError
    mov ah,9
    int 21h
    JMP DisplayMenu
    
    Dec2Hex:
    CALL DEC2HEXA
    JMP DisplayMenu
    
    Quit:
    mov ah,4CH
    int 21h
    
    Main endp
    
DEC2HEXA proc
    mov dx,OFFSET Decimal
    mov ah,09h
    int 21h
    mov ax,0
    PUSH ax
    
    Again:
    mov ah,1
    int 21h
    
    CMP al,13 ; If Return is entered, start division.
    JE StartDivision
    
    CMP al,'0'
    JL Again
    
    CMP al,'9'
    JG Again
    
    mov ah,0
    SUB al,30h  ;30h = 48
    mov cx,ax
    POP ax
    
    mov bx,10
    MUL bx
    
    ADD ax,cx
    PUSH ax
    JMP Again
    
    StartDivision:
    mov cx,0
    mov bx,16
    POP ax
    
    Div1:
    div bx 
    PUSH dx 
    ADD cx,1 
    mov dx,0 
    CMP ax,0 
    JNE Div1
    
    HEXA:
    mov dx,0
    POP dx
    ADD dl,30h
    
    CMP dl,39h
    JG MoreHexa
    
    DisplayHexa:
    mov ah,2
    int 21h
    LOOP Hexa
    JMP Skip
    
    MoreHexa:
    ADD dl, 7h
    JMP DisplayHexa
    
    Skip:
    ret
    
    DEC2HEXA endp

End Main

输入:

输入后的画面:

mov ah,1
int 21h
CMP al,13 ; If Return is entered, start division.
JE StartDivision

Enter 结束输入循环,将光标移至当前行的开头,即输入的十进制数开始的地方。接下来,您的代码会立即转换并显示十六进制字符。这将覆盖输入的十进制数。 "2414"中的前三个字符被"96E"中的三个字符覆盖,保留第四个字符"4"。

只要输入循环停止就打印一个额外的换行符:

StartDivision:
  mov dl, 10   ; Linefeed
  mov ah, 02h  ; DOS.PrintCharacter
  int 21h
  ...