1. 程式人生 > >彙編——從鍵盤輸入兩個字串,用串操作指令判斷是否相等

彙編——從鍵盤輸入兩個字串,用串操作指令判斷是否相等

 本文的程式碼示例是從鍵盤輸入兩個字串,然後藉助串操作指令 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標誌位清零。