串处理指令处理存放在存储器中的字节串或字串,串处理的方向由方向标志位DF决议,串处理指令之前可加重复前缀,在履行串处理指令时,源串的指针SI和意图串的指针DI依据DF的指示主动增量(+1或+2)或主动减量(―1或―2)。
MOVSB / MOVSW 串传送
STOSB / STOSW 存串
LODSB / LODSW 取串
CMPSB / CMPSW 串比较
SCASB / SCASW 串扫描
⑵ 串重复前缀
REP 重复串操作
REPE / REPZ 持平/为零时重复
REPNE / REPNZ 不等/不为零时重复
⑶ 设置方向标志
CLD 使DF=0
STD 使DF=1
CLD DF置0(clear direction flag)
STD DF置1(set direction flag)
为了处理接连存储单元中的字符串或数串,地址指针需求接连地增量或减量,指针增量或减量决议了串处理的方向。当用CLD指令使DF=0时,源串的指针SI和意图串的指针DI主动增量(+1或+2),当用STD指令使DF=1时,指针SI和DI主动减量(―1或―2)。地址指针是±1仍是±2,取决于串操作数是字节仍是字,处理字节串时,地址指针每次+1或―1,处理字串时,地址指针每次+2或―2。
2 串处理指令
MOVSB / MOVSW 串传送(move string byte/word)
履行操作:
(ES:DI)←(DS:SI)
(SI)←(SI)±1(字节)或±2(字)
(DI)←(DI)±1(字节)或±2(字)
STOSB / STOSW 存串(load from string byte/word)
履行操作:
(ES:DI)←(AL)或(AX)
(DI)←(DI)±1(字节)或±2(字)
LODSB / LODSW 取串(store into string byte/word)
履行操作:
(AL)或(AX)←(DS:SI)
(SI)←(SI)±1(字节)或±2(字)
CMPSB / CMPSW 串比较(compare string byte/word)
履行操作:
(DS:SI)-(ES:DI),依据比较的成果设置条件码
(SI)←(SI)±1(字节)或±2(字)
(DI)←(DI)±1(字节)或±2(字)
SCASB / SCASW 串扫描(scan string byte/word)
履行操作:
(AL)-(ES:DI)或(AX)-(ES:DI),依据扫描比较的成果设置条件码
(DI)←(DI)±1(字节)或±2(字)
这组串处理指令用于处理接连存储单元中的字操作数或字节操作数,它们有几个共同点:
1. 它们一般都分两步履行,第一步完结处理功用,如传送、存取、比较等。第二步进行指针修正,以指向下一个要处理的字节或字。
2. 源串有必要在数据段中,意图串有必要在附加段中,串处理指令隐含的寻址方法是SI和DI寄存器的直接寻址方法。源串答应运用段跨过前缀来指定段。
3. 串处理的方向取决于方向标志DF,DF=0时,地址指针SI和DI增量(+1或+2);DF=1时,地址指针SI和DI减量(-1或-2)。程序员能够运用指令CLD和STD来树立方向标志。
4. MOVS、STOS、LODS指令不影响条件码,CMPS、SCAS指令依据比较的成果设置条件码。
与串传送指令MOVS和串存入指令STOS联用的重复前缀是REP,取串指令LODS一般不加重复前缀。 与串比较指令和串扫描指令联用的重复前缀是REPE(REPZ)或REPNE(REPNZ)。
REP 重复履行串指令,(CX)=重复次数
履行操作:
① (CX)=0时,串指令履行完毕,不然履行② ~ ④
② (CX)←(CX)-1
③ 履行串指令(MOVS或STOS)
④ 重复履行①
REPE / REPZ 持平/为零时重复履行串指令,(CX)=比较/扫描的次数
履行操作:
① (CX)=0或ZF=0时,完毕履行串指令,不然持续② ~ ④
② (CX)←(CX)-1
③ 履行串指令(CMPS或SCAS)
④ 重复履行①
REPNE / REPNZ 不等/不为零时重复履行串指令,(CX)=比较/扫描的次数
履行操作:
① (CX)=0或ZF=1,完毕履行串指令,不然持续② ~ ④
② (CX)←(CX)-1
③ 履行串指令(CMPS或SCAS)
④ 重复履行①
REP对这以后的串指令(MOVS或STOS)只要一个完毕条件,即重复次数(CX)=0。在进行串比较和串扫描时,串指令前应加前缀REPE(REPZ)或REPNE(REPNZ),这两条重复前缀用重复次数(CX)和比较成果(ZF)来操控串指令的完毕。当(CX)=0时,阐明每个串数据都比较(或扫描)过了,此刻串操作正常完毕;当因ZF=1或0而完毕串操作时,阐明在满意比较成果持平或不等的条件下,可提前完毕串操作。