汇编——从键盘输入两个字符串,用串操作指令判断是否相等

 本文的代码示例是从键盘输入两个字符串,然后借助串操作指令 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标志位清零。

猜你喜欢

转载自blog.csdn.net/tangCprogranm/article/details/84801658