本文的代码示例是从键盘输入两个字符串,然后借助串操作指令 CMPSB 进行判断。
CMPSB 指令的功能:用DS:[SI]所指的字节单元内容减去ES:[DI]所指字节单元内容,并且根据指令执行结果设置标志位,然后根据DF的内容修改变址寄存器SI和DI的内容。若DF=,0,则根据串的类型是字节还是字,将变址寄存器加1或加2(本文串类型是字节,所以加1);若DF=1,则根据串的类型是字节还是字,将变址寄存器减1或减2(本文串类型是字节,所以减1)。
DATA SEGMENT
STR1 DB 50
DB 50 DUP(?)
COUNT EQU $-STR1
STR2 DB 50
DB 50 DUP(?)
RESULT DB ?
SAME DB 'The two strings are the same.','$'
NSAME DB 'The two strings are not the same.','$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV CX,COUNT
MOV DX,OFFSET STR1 ;输入第一个字符串
MOV AH,0AH
INT 21H
MOV AH,02H ;回车换行
MOV DL,0DH
INT 21H
MOV DL,0AH
INT 21H
MOV AH,0AH
MOV DX,OFFSET STR2 ;输入第二个字符串
INT 21H
MOV AH,02H ;回车换行
MOV DL,0DH
INT 21H
MOV DL,0AH
INT 21H
LEA SI,STR1
LEA DI,STR2
CLD
LEA DX,SAME
REPZ CMPSB
JZ NEXT
LEA DX,NSAME
NEXT: MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
注意点:
1.因为要用到ES段,所以在给数据段DS赋地址之后,还要给附加段ES赋地址。
2.因为要输入两个字符串,并且最后有结果提示语输出,所以在两次输入字符串之后进行了回车换行。汇编中回车换行需要0AH和0DH一起使用。
3.CLD是将DF标志位清零。