(2)串比较指令 CMPS 華中科技大? 例2从键盘输入一字符串至STR1为首址的字节缓冲区中,试 比较该串与字节字符串STR2是否相等,相等则0→BX;不 等-1→BX。 .386 输入缓冲区 DATA SEGMENT USE16 STR1 DB 80 DB 0 ;待比较字符串 DB 80 DUP(O) ;待比较字符串长度 STR2 DB'WANI.ASM' COUNT EQU8-STR2 DATA ENDS STACK SEGMENT USE16 STACK DB200 DUP(O) STACK ENDS CODE SEGMENT USE16 ASSUME DS:DATA,ES:DATA,SS:STACK,CS:C
(2)串比较指令 CMPS 例2 从键盘输入一字符串至STR1为首址的字节缓冲区中,试 比较该串与字节字符串STR2是否相等,相等则0→BX;不 等-1→BX。 .386 DATA SEGMENT USE16 STR1 DB 80 DB 0 DB 80 DUP(0) STR2 DB ′WAN1.ASM′ COUNT EQU $-STR2 DATA ENDS STACK SEGMENT USE16 STACK DB 200 DUP(0) STACK ENDS CODE SEGMENT USE16 ASSUME DS:DATA,ES:DATA,SS:STACK,CS:CODE 输入缓冲区 ;待比较字符串 ;待比较字符串长度
(2)串比较指令 ·CMPS 華中科技大浮 START: MOV AX,DATA MOV DS,AX 当前数据段和当前附加数据段重合 MOV ES,AX LEA DX, STR1 MOV AH,10 输入一串字符至STR1缓冲区 INT 21H MOV AL, STR1+1 CMP AL, COUNT 比较两串长度是否相等,不等转EXIT JNE EXIT LEA SI,STR1+2 LEA DI,STR2 MOV CX,COUNT REPZ CMPSB ;逐一比较两串的对应字符是否相等 JNE EXIT ;不等,转EXIT MOV BX,0 ;相等,0→BX JMP RETU EXIT: MOV BX,-1 RETU: MOV AH,4CH INT 21H CODE ENDS END START
(2)串比较指令 CMPS START: MOV AX,DATA MOV DS,AX MOV ES,AX LEA DX,STR1 MOV AH,10 输入一串字符至STR1缓冲区 INT 21H MOV AL,STR1 +1 CMP AL,COUNT 比较两串长度是否相等,不等转EXIT JNE EXIT LEA SI,STR1 +2 LEA DI,STR2 MOV CX,COUNT REPZ CMPSB ;逐一比较两串的对应字符是否相等 JNE EXIT ;不等,转EXIT MOV BX,0 ;相等, 0 →BX JMP RETU EXIT: MOV BX,-1 RETU: MOV AH,4CH INT 21H CODE ENDS END START 当前数据段和当前附加数据段重合
(3)串搜索指令SCAS 華中科技大学 SCASB 字节串搜索 ●格式:SCAS OPD或 SCASW 字串搜索 SCASD 双字串搜索 ●功能:(I)字节操作:(AL)-(ES:[DI]/[EDI]) 字操作: (AX)-(ES:[DI]/[EDI]) 双字操作:(EAX)-(ES:[DI]/[EDI]) (2)修改串指针使之指向下一元素.修改方式为: i.当DF=0时,(DI)/(EDI)增量1(字节操作)或 2(字操作)或4(双字操作)。 ii.当DF=1时,(DI)/(EDI)减量1(字节操作)或 2(字操作)或4(双字操作)。 (3)修改循环变量(CX)/(ECX)-1→CX)/ECX
(3)串搜索指令 SCAS ●格式: SCAS OPD 或 ●功能: ⑴ 字节操作:(AL)-(ES:[DI]/[EDI]) 字操作: (AX)- (ES:[DI]/[EDI]) 双字操作:(EAX)-(ES:[DI]/[EDI]) ⑵ 修改串指针使之指向下一元素.修改方式为: i.当DF=0时,(DI)/(EDI)增量1(字节操作)或 2(字操作)或4(双字操作)。 ii.当DF=1时,(DI)/(EDI)减量1(字节操作)或 2(字操作)或4(双字操作)。 ⑶ 修改循环变量(CX)/(ECX) -1→ CX)/ECX SCASB 字节串搜索 SCASW 字串搜索 SCASD 双字串搜索
(3)串搜索指令SCAS 華中科技大学 说明: (1)待搜索串一定要是目的串,放在当前附加数据段中, 指针为DI/EDI; (2)该指令可带的重复指令为: i.REPZ/REPE 若(CX/ECX)≠0且相等时接着搜索. ii.REPNZ/REPNE若(CX/ECX)≠O且不相等时接着搜索. 例3
(3)串搜索指令 SCAS 说明: ⑴ 待搜索串一定要是目的串,放在当前附加数据段中, 指针为DI/EDI; ⑵ 该指令可带的重复指令为: i. REPZ/REPE 若(CX/ECX)≠0且相等时接着搜索. ii.REPNZ/REPNE 若(CX/ECX)≠0且不相等时接着搜索. 例 3
(3)串搜索指令SCAS 華中科技大? 例3从键盘输入一串字符至ASS区,试用串搜索指令在该串中 搜索子串AM’出现的次数→BX. .386 DATA SEGMENT USE16 ASS DB 80 DB 0 DB 79DUP(0) DATA ENDS STACK SEGMENT USE16 STACK DB 200 DUP(0) STACK ENDS CODE SEGMENT USE16 ASSUME DS:DATA,ES:DATA,SS:STACK,CS:CODE START:MOV AX,DATA MOV DS,AX 当前数据段和当前附加数据段重合 MOV ES,AX
(3)串搜索指令 SCAS 例3 从键盘输入一串字符至ASS区,试用串搜索指令在该串中 搜索子串’AM’出现的次数→BX. .386 DATA SEGMENT USE16 ASS DB 80 DB 0 DB 79 DUP(0) DATA ENDS STACK SEGMENT USE16 STACK DB 200 DUP(0) STACK ENDS CODE SEGMENT USE16 ASSUME DS:DATA,ES:DATA,SS:STACK, CS:CODE START: MOV AX,DATA MOV DS,AX MOV ES,AX 当前数据段和当前附加数据段重合