;试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否完全相同,
;若相同则显示'MATCH',若不相同则显示'NO MATCH'.
DATA SEGMENT
string1 DB "I a$"
string2 DB "I am a student!$"
YES DB "MATCH", 0DH, 0AH, '$'
NO DB "NO MATCH", 0DH, 0AH, '$'
DATA ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE, DS:DATA, ES:DATA
STRAT:
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,data
MOV DS,AX
MOV ES,AX
;初始化
MOV AX,0
MOV CX,0
LEA SI,string1
LEA DI,string2
length1: ;string1的长度
SUB [SI],'$'
JZ length2
INC SI
INC AX
JNZ length1
length2: ;string2的长度
SUB [DI],'$'
JZ compare
INC DI
INC CX
JNZ length2
compare: ;设置CX为最大长度
CMP CX,AX
JGE lop
MOV CX,AX
lop:
LEASI, string1;设置串比较指令的初值
LEADI, string2
CLD
REPE
CMPSB;串比较
JNEdispNo
LEADX, YES;显示MATCH
JMPdisplay
dispNo:LEADX, NO;显示NO MATCH
display:MOVAH, 9;显示一个字符串的DOS调用
INT21H
RET
MAIN ENDP
CODE ENDS
END STRAT
//
指令的基本功能:CLD DF=0
STD DF=1
/
Direction Flag (DF)
- 方向标志,在串处理指令中控制处理信息的方向用。
当DF为1时,每次操作后使变址寄存器SI和DI减量,这样就使串
处理从高地址向低地址方向处理。当DF为0时,则使SI和DI增量
,使串处理从低地址向高地址方向处理。
///
有效地址传送器 LEA
相等/为零时重复执行串指令 REPE/REPZ
指令的汇编格式:REPE / REPZ (CX)=比较/扫描的次数
指令的基本功能:① (CX)!=0或ZF=0时,结束执行串指令,否则继续② ~ ④
② (CX)←(CX)-1
③ 执行串指令(CMPS或SCAS)
④ 重复执行①
不等/不为零时重复执行串指令 REPNE / PEPNZ
指令的汇编格式:REPNE / PEPNZ (CX)=比较/扫描的次数
指令的基本功能:① (CX)!=0或ZF=1,结束执行串指令,否则继续② ~ ④
② (CX)←(CX)-1
③ 执行串指令(CMPS或SCAS)
④ 重复执行①