입력 한 문자열을 반대로하는이 어셈블리 코드가 있습니다. 최대 20 자까지 허용됩니다. 내 문제는 내가 출력을 보려면 Enter 키를 누르면 반전 된 문자열 끝에 여분의 문자가 있다는 것입니다.
왜 그런 일이 발생하고 출력에서이를 제거 할 수 있는지 이해해주십시오.
문자열을 표시하려면 함수 09H int 21h, 문자열을 입력하려면 0Ah int 21h 함수 만 사용해야합니다. 우리는 TASM을 사용하고 있습니다.
도움을 주시면 감사하겠습니다. 고맙습니다.어셈블리에서 입력 문자열 반전
.model small
.stack 100h
.data
MSG DB "Input String(max 20 chars): ", 10, 13, "$"
Sentence1 DB 21,?,21 dup("$")
str2 dw 21 dup("$")
.code
start:
mov ax, @data
mov ds, ax
;Getting the string input
mov ah,09h
lea dx, MSG
int 21h
lea si,Sentence1
mov ah,0ah
mov dx,si
int 21h
;Reverse String
mov cl,Sentence1
add cl,1
add si,2
loop1:
inc si
cmp byte ptr[si],"$"
jne loop1
dec si
lea di,str2
loop2:
mov al,byte ptr[si]
mov byte ptr[di],al
dec si
inc di
loop loop2
;Printing the reverse string
mov ah,09h
lea dx,str2
int 21h
mov ah, 4ch
int 21h
end start
어떤 추가 문자가 있습니까? 읽기 문자열에는 끝에 CR (ASCII 13)이 있습니다. 또한, 읽기 문자열의 끝을 찾는 루프가 필요 없습니다. 읽은 문자의 수는'[Sentence1 + 1] '을 통해 반환됩니다. – Michael
문자 P가 뒤로 향하는 것처럼 마음과 같은 여분의 문자입니다. 그럼 그냥 루프 1을 제거해야합니까? – naomiyx