汇编语言 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
如果你想让它继续输出,那么你不能在调用资本后再次调用输出。
我几乎用汇编语言解决了我的问题。但是,大写部分显示为 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
如果你想让它继续输出,那么你不能在调用资本后再次调用输出。