本文通过汇编编写一程序
要求比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示“MATCH”,若不相同则显示“NO MATCH”
STACKS SEGMENT STACK
DW 100H DUP(?)
TOP LABEL WORD
STACKS ENDS
DATAS SEGMENT
STRING1 DB 'abcd123$'
STRING2 DB 'abcd133$' --定义两个不同的字符串
LEN1 EQU $-STRING1
LEN2 EQU $-STRING2 --获得字符串的长度
MATCH DB 'MATCH!$'
NOMATCH DB 'NO MATCH!$' --定义MATCH和NOMATCH信息
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACKS
MAIN PROC FAR
MOV AX,STACKS
MOV SS,AX
LEA SP,TOP
MOV AX,DATAS
MOV DS,AX
MOV ES,AX --将存放在数据段中的原串首地址放入DS和ES中
MOV AH,LEN1
MOV AL,LEN2 --将两个字符串的长度放入AH\\AL中
CMP AL,AH --比较两个寄存器的值,如果不相同则输出‘NOMATCH’
JNE NO
MOV CH,0
MOV CL,AL --将AL中的值存入cx中,作为计数器
LEA SI,STRING1
LEA DI,STRING2 -串地址放入SI\\DI
CLD --使得DF=0,使得地址自动增量
REPE CMPSB --串比较指令
JNE NO --如果不相等就输出‘NOMATCH’
YES:
LEA DX,MATCH
MOV AH,09H
INT 21H
JMP EXIT --如果以上都相等则输出‘NOMATCH’,跳转到退出
NO: LEA DX,NOMATCH
MOV AH,09H
INT 21H
EXIT:
MOV AH,4CH
INT 21H
MAIN ENDP
CODES ENDS
END MAIN