Turbo Assembler 在尝试打印新消息时打印之前的消息

Turbo Assembler prints previous message when trying to print new message

我有一个程序可以打印它接收到的一些字符串作为输入。 这是完整的程序:

IDEAL
MODEL small
STACK 100h
DATASEG
; --------------------------
; Your variables here
; --------------------------
const_10 db 10

max_pin_len db 6
pin_len db 0
pin db 6 dup('$')

message_1 db 10, 'Print the text $'
message_2 db 10, 'Print the pin $'
message_3 db 10, 'Encrypt: 0, Decrypt: 1 $'
message_4 db 10, 'result: $'
is_encrypt db ?
newline db 13,10, '$'
maxlen db 100
cur_input_len db 0
buf db 100 dup('$') 

CODESEG
start:
    mov ax, @data
    mov ds, ax
; --------------------------
; Your code here
; --------------------------
    lea dx, [message_1]
    mov ah, 9
    int 21h
    
    mov dl, 10
    mov ah, 2
    int 21h
    
input_str:
    mov ah, 0Ah
    mov dx, offset maxlen
    int 21h
    call NEW_LINE
    lea dx, [buf]
    mov ah, 9
    int 21h
    call NEW_LINE
    
input_pin:
    lea dx, [message_2]
    mov ah, 9
    int 21h
    
    mov dl, 10
    mov ah, 2
    int 21h
    
    mov ah, 0Ah
    mov dx, offset max_pin_len
    int 21h
    
    call NEW_LINE
    lea dx, [pin]
    mov ah, 9
    int 21h
    call NEW_LINE
    
    
    lea di, [buf]
    mov cx, 0
    mov cl, [cur_input_len] ;the character limit
process:
    mov dl, [di]
    ;print shifted character
    add dl, 5
    mov ah, 2
    int 21h
    
    inc di
    loop process
    
after:
    call NEW_LINE
    mov dl, [cur_input_len]
    add dl, '0'
    mov ah, 2
    int 21h
exit:
    mov ax, 4c00h
    int 21h
    
proc PRINT_AL

    ; dived by 10 to get two digits
    MOV AH,0
    DIV [CONST_10] ; al-/   ah=%
    
    ;print ASHAROT
    MOV DX,AX
    ADD DL,'0'
    ADD DH,'0'
    MOV AH,2
    INT 21H
    
    ;PRINT YECHIDOT 
    MOV DL,DH
    INT 21H

    ret
endp

proc NEW_LINE
    lea dx, [newline]
    mov ah, 9
    int 21h
    ret
endp
END start

现在,问题出在输出中。在 input_pin 中,当我调用行

call NEW_LINE
lea dx, [pin]
mov ah, 9
int 21h
call NEW_LINE

它输出:

12345
Print the text

我从来没有要求它在 pin 值之后打印消息。有人可以帮忙吗? 我什至在上面的行之前打印了另一条消息 message_2,它仍然打印消息 1.

好的,从评论中找出答案: 只需确保变量中缓冲区的大小比最大大小高 1。新代码如下所示:

max_pin_len db 6
pin_len db 0
pin db 7 dup('$')