; 实验七-3: 字符串查找程序 - 使用REP SCASB ; 功能: 在字符串中查找特定字符 DATAS SEGMENT TARGET_STRING DB 'Hello, Assembly Language!', 0 ; 目标字符串 SEARCH_CHAR DB 'A' ; 要查找的字符 CHAR_FOUND DB 'Character Found!', 0DH, 0AH, '$' CHAR_NOT_FOUND DB 'Character Not Found!', 0DH, 0AH, '$' POSITION DB 'Position: ', 0 ; 位置信息 DATAS ENDS STACKS SEGMENT DB 64 DUP(?) STACKS ENDS CODES SEGMENT ASSUME CS:CODES, DS:DATAS, SS:STACKS START: MOV AX, DATAS MOV DS, AX MOV ES, AX ; SCASB使用ES:DI LEA DI, TARGET_STRING ; DI指向目标字符串 MOV AL, SEARCH_CHAR ; AL=要查找的字符 ; 计算字符串长度 MOV CX, 0 COUNT_LOOP: CMP BYTE PTR [DI + CX], 0 JE COUNT_DONE INC CX JMP COUNT_LOOP COUNT_DONE: ; 使用REP SCASB查找字符 ; SCASB将AL与[ES:DI]比较,不等则继续,相等则停止 REP SCASB ; 检查查找结果 ; 如果CX=0且ZF=0,说明没找到 ; 如果ZF=1,说明找到了 JZ FOUND ; 未找到的情况 LEA DX, CHAR_NOT_FOUND JMP DISPLAY FOUND: ; 计算位置:原长度 - 剩余长度 = 找到的位置 MOV AX, 0 SUB AX, CX ; AX = 原长度 - CX DEC AX ; 位置从1开始计数 ADD AX, 1 LEA DX, CHAR_FOUND DISPLAY: MOV AH, 09H INT 21H ; 程序结束 MOV AH, 4CH INT 21H CODES ENDS END START