masm回文检查输出困境

masm palindrome check output dilemma

我试图用 masm 做一个回文检查程序并使用下面的代码,但我总是没有得到回文作为输出,无法弄清楚为什么。请帮忙修改代码。下面给出代码以进一步说明。 提前致谢。

read macro
mov ah,01h
int 21h
endm
write macro
mov ah,02h
int 21h
endm
assume cs:code,ds:data
data segment
a db 20 dup(?)
b db 20 dup(?)
msg1 db "enter text: $"
msg2 db "reverse string is: $"
msg3 db " palindrome$"
msg4 db " not palindrome$"
data ends

code segment
start:mov ax,data
mov ds,ax
mov es,ax
mov cx,0000h
lea si,a
lea dx,msg1
mov ah,09h
int 21h

r:read
cmp al,0dh
je l
mov [si],al
inc si
inc cx
jmp r

l:dec si
lea di,b
mov ax,cx

l1:mov dl,[si]
mov [di],dl
inc di
dec si
loop l1

l2:
mov cx,ax
lea si,b
lea dx,msg2
mov ah,9h
int 21h

w:mov dl,[si]
write
inc si
loop w

mov cx,ax
cld
lea si,a
lea di,b
l4:cmpsb
jne l5
loop l4
lea dx,msg3
mov ah,09h
int 21h
mov ah,4ch
int 21h

l5:lea dx,msg4
mov ah,09h
int 21h
mov ah,4ch
int 21h
code ends
end start

无论输入字符串是什么,它都不是回文。

不要使用 mov ax,cx,而是使用 mov bx,cx,因为 ah 用于中断,这可能会导致一些问题。在 mov cx,ax 所在的每个地方都使用 mov cx,bx ....现在它是正确的。 我回答了我自己的问题可能看起来很有趣,但我现在想到了这一点并且没有删除因为它可能会帮助其他人不做同样的事情...