3.5.1 串操作指令 在存贮器中存放的一串字或字节,可以是二进制数,也可以是BCD码或ASCII码。它们存放在某一个连续的内存区中,若对它们的每个字或字节均作同样的操作, 就称为串操作。我们把能完成这样功能的指令称为字符串操作指令或简称为串操作指令。 1. MOVS/MOVSB/MOVSW 该类指令是串传送指令,用于内存区之间字节串或字串的传送。 该类指令一般格式为: MOVS OPDR1,OPDR2 ;OPDR2是源串,OPDR1是目的串 MOVSB;字节传送 MOVSW;字传送 2.CMPS/CMPSB/CMPSW 该类指令是串比较指令,常用于内存区之间的数据、字符等的比较。 该指令执行后,也将使SI、DI加减1和2,具体由DF的值决定。 该类指令的一般格式为: CMPS OPRD1,OPRD2;OPRD1是源串,OPRD2是目的串 CMPSB ;字节比较 CMPSW ;字比较 3. SCAS/SCASB/SCASW 该类指令是串扫描指令,用于寻找内存区中指定的数据和字符。该类指令的一般格式为: SCAS OPRD SCASB ;字节操作 SCASW ;字操作 4. LODS/LODSB/LODSW 该类指令是字串装入指令。它将由SI所指定的源串字节或字装入到累加器AL或AX中去,并根据DF的值修改指针SI,以指向下一个要装入的字节或字。 该类指令的一般格式为: LODS OPRD ;OPRD为源串 LODSB LODSW 5. STOS/STOSB/STOSW 该类指令是字串存贮指令。它将AL或AX中的字节或字存贮到由DI所指定的附加段中去,且根据DF的值来修改DI的值。 该类指令一般格式为: STOS OPRD ;OPRD为目的串 STOSB ;字节串 STOSW ;字串 6.REP 它是串指令的前缀。当某一条串指令需要多次重复时,就可以加上该前缀。重复次数应放在寄存器CX中。这样每重复执行一次,CX内容减1,直到CX=0,才停止重复。 7. REPE/REPNE 它们是条件重复前缀。当条件满足时,才重复执行后面的串指令,一旦条件不满足,重复就停止。 例:将1000个字符的字符串从内存的BUFFER1搬移到内存的BUFFER2中去。 MOV SI,OFFSETBUFFER1 ;BUFFER1偏移地址送SI MOVDI,OFFSETBUFFER2 ;BUFFER2偏移地址送DI MOVCX,1000 ;传送次数送CX REPEMOVSBUFFER2,BUFFER1;重复搬移 例:将数据段中100个字的数据块BLOCK1搬移到同一个数据段的BLOCK2中去。 PUSH DS POP ES ;使DS=ES LEA SI,BLOCK1 ;源串地址送SI LEADI,BLOCK2 ;目的串地址送DI MOV CX,0064H ;重复次数送CX CLD ;使DF=0,SI、DI做加2操作 REPE MOVSW ;重复执行,直到CX=0为止 例:比较DEST和SOURCE中的500个字节,找出第一个不相同的字节,如果找到,则将SOURCE中的这个数送AL中。 CLD LEADI,ES:DEST LEASI,SOURCE MOVCX,500 REPECMPB JCXZMEXT MATCH:DEC SI MOV AL,BYTEPTR[SI] … NEXT: …