汇编语言 8086 输出两次

Output Twice in Assembly Language 8086

我几乎用汇编语言解决了我的问题。但是,大写部分显示为 double 并且上面有一个 space 。它应该只显示那些。当我键入 "i am from burma" 时,大写部分有效,但它上面有一个 space 并且它输出两次。我该如何解决这个问题?

当前结果

预期结果

Enter string: i am from burma
a am from burma
I am from burma

代码

.MODEL SMALL
.STACK 100H

.DATA
    INPUT_STRING          DB 13,10,"Enter string: $" 
    USER_INPUT_STRING     DB 80, 0, 80 DUP('$')
    BREAKLINE             DB 13, 10, "$"

.CODE
main PROC
    MOV AX, @DATA
    MOV DS, AX
    MOV ES, AX

    LEA DX,INPUT_STRING
    MOV AH, 09H
    INT 21H

    LEA DX, USER_INPUT_STRING
    MOV AH, 0AH
    INT 21H

    LEA DX, BREAKLINE
    MOV AH, 09H
    INT 21H

    CALL swap 
    CALL output
    CALL swap
    CALL capital
    CALL output


    MOV AX, 4C00H
    INT 21H
main ENDP

swap PROC
    MOV AH, USER_INPUT_STRING + 2             ;Swap letters
    MOV BL, USER_INPUT_STRING + 1
    MOV BH, 0
    MOV AL, USER_INPUT_STRING + 2 + BX - 1
    MOV USER_INPUT_STRING + 2, AL
    MOV USER_INPUT_STRING + 2 + BX - 1, AH
    RET
swap ENDP 

capital PROC
    SUB USER_INPUT_STRING + 2, 32       ;Capitalize
    MOV AH, 09H
    INT 21H  
capital ENDP  

output PROC 
    LEA DX, USER_INPUT_STRING + 2
    MOV AH, 09H
    INT 21H

    LEA DX, BREAKLINE
    MOV AH, 09H
    INT 21H   
    RET
output ENDP


END main

您需要在资本函数中删除对 INT 21h 的调用。你也可能想要一个 RET

capital PROC
    SUB USER_INPUT_STRING + 2, 32       ;Capitalize
    RET
capital ENDP

如果你想让它继续输出,那么你不能在调用资本后再次调用输出。