8086指令系统---串处理指令
⑴ 串处理指令
MOVSB / MOVSW 串传送
STOSB / STOSW 存串
LODSB / LODSW 取串
CMPSB / CMPSW 串比较
SCASB / SCASW 串扫描
⑵ 串重复前缀
REP 重复串操作
REPE / REPZ 相等/为零时重复
REPNE / REPNZ 不等/不为零时重复
⑶ 设置方向标志
CLD 使DF=0
STD 使DF=1
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而结束串操作时,说明在满足比较结果相等或不等的条件下,可提前结束串操作。
8086指令系统串处理指 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)