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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值