8086/8088指令系统详解之(4)串操作

时间:2022-10-21 00:48:52

串操作指令

1,串传送指令MOVS
2,串装入指令LODS
3,串送存指令STOS
4,串比较指令CMPS
5,串扫描指令SCAS

串操作指令的特征是对数据块(字符串或数值串)进行操作,并且其中部分指令可以两个操作数同时是存储器操作数。
MOVS (Move string) 串传送
CMPS (Compare string) 串比较
SCAS (Scan string) 串扫描
LODS (Load from string) 从串中取数据
STOS (Store in to string) 存数据到串中

说明:
⑴ 串操作指令每次执行完成一个字节或一个字的操作。
⑵ 通常使用重复前缀,用来完成数据块的操作。

重复前缀
⑴ REP 重复
⑵ REPE/REPZ 相等/为零则重复
⑶ REPNE/REPNZ 不相等/不为零则重复

特点:
⑴ 串操作指令需要指明每次操作的类型:B 字节,W字
例如:MOVSB, CMPSW等。
⑵ 串操作指令使用DS:SI作为源操作数的指针;ES:DI作为目的操作数的指针
⑶ 使用DF来表示每次操作以后变址寄存器SI和DI的变化方向
CLD ;DF=0 SI,DI做增量变化 B:+1或W:+2
STD ;DF=1 SI,DI做减量变化 B:-1或W:-2
⑷ 使用CX来表示用重复前缀以后指令需要重复执行的次数

1,串传送指令MOVS(MOVe String)

MOVSB 或 MOVSW 以字节或字为单位在存储单元之间传送数据
可以使用REP前缀
例:教材P132例4.10

2,串装入指令LODS(LOaD String)

LODSB 或 LODSW 从内存中取出字节或字到累加器AL或AX
可以使用REP前缀,但意义不大。
例:教材P133例4.11

3,串送存指令STOS(STOre String)

STOSB 或 STOSW 从累加器中存字节或字到存储器
可以使用REP前缀
例:教材P133例4.12
教材P134例4.13

4,串比较指令CMPS(CoMPare String)

⑷ CMPS指令
CMPSB 或 CMPSW 以字节或字为单位进行两个存储器操作数的比较
可以使用REPE/REPZ、REPNE/REPNZ前缀
用源操作数-目的操作数
例:教材P135例4.14

5,串扫描指令SCAS(SCAn String)

SCASB 或 SCASW 在数据串中查找AL或AX中的内容。
可以使用REPE/REPZ、REPNE/REPNZ前缀

例: 教材P135例4.15