INT 21H中断调用中,要认清楚0AH的用法。
.MODEL SMALL
.DATA
INPUT DB"Please input a string:",'$'
OUTPUT1 DB "YES", 0AH,0DH,'$'
OUTPUT2 DB "NO", 0AH,0DH,'$'
CHANGELINE DB 0AH,0DH,'$'
STRING DB 80, ?, 80 DUP(?)
.CODE
MAIN PROC FAR
MOV AX,@DATA
MOV DS,AX
MOV DX,OFFSET INPUT
MOV AH,09H
INT 21H
MOV DX,OFFSET STRING
MOV AH,0AH;输入字符串
INT 21H
;处理字符串
MOV AL,STRING+1;输入的字符数
ADD AL,2
MOV AH,0
MOV SI,AX
MOV STRING[SI],'$';在字符串尾查入$,方便输出,输出要求有$,输入没有要求$,易忽略
MOV BX,OFFSET STRING+2;字符串首
MOV SI,BX
MOV CL,STRING+1;输入的字符数
MOV CH,0
ADD SI,CX
DEC SI;减去最后一位字符$
COM:
CMP BX,SI;地址相等,查找结束
JGE OP1;大于等于,才能判断偶数个字符
XOR AL,AL;清空al
MOV AL,[BX]
CMP AL,[SI]
JNE OP2;但凡有不等,即不是回文串,跳转输出
INC BX
DEC SI
JMP COM
OP1:
MOV DX,OFFSET CHANGELINE
MOV AH,09H
INT 21H
MOV DX,OFFSET OUTPUT1
MOV AH,09H
INT 21H
JMP ENDD
OP2:
MOV DX,OFFSET CHANGELINE
MOV AH,09H
INT 21H
MOV DX,OFFSET OUTPUT2
MOV AH,09H
INT 21H
JMP ENDD
ENDD:MOV AX,4C00H
INT 21H
MAIN ENDP
END