1.串处理指令
设置方向标志指令
CLD、STD
串处理指令
MOVSB / MOVSW
STOSB / STOSW
LODSB / LODSW
CMPSB / CMPSW
SCASB / SCASW
串重复前缀
REP
REPE / REPZ
REPNE / REPNZ
与 REP 配合工作的 MOVS / STOS / LODS
REP repeat
执行操作:
(1) 如 (CX)=0 则退出 REP,否则转(2)
(2) (CX) ← (CX) -1
(3) 执行 MOVS / STOS / LODS
(4) 重复 (1) ~ (3)
2.MOVS 串传送指令
MOVS DST, SRC move string DST目的操作数destination SRC源
MOVSB (字节)
MOVSW (字)
data segment mess1 db ‘personal_computer’ data ends extra segment mess2 db 17 dup (?) extra ends code segment code ends data segment mess1 db ‘personal_computer’ data ends extra segment mess2 db 17 dup (?) extra ends code segment mov ax, data mov ds,ax mov ax, extra mov es, ax lea si, mess1 lea di, mess2 mov cx, 17 cld rep movsb … code ends data segment mess1 db ‘personal_computer’ mess2 db 17 dup (?) data ends code segment mov ax, data mov ds, ax mov es, ax lea si, mess1 lea di, mess2 mov cx, 17 cld rep movsb … code ends
3.STOS 存入串指令
STOS DST store into string
STOSB (字节)
STOSW (字)
执行操作:
字节操作:((DI))←(AL), (DI)←(DI)±1
字操作:((DI))←(AX), (DI)←(DI)±2
例:把 附加段 中的 10 个字节缓冲区置为 20H
lea di, mess2
mov al, 20H
mov cx, 10
cld
rep stosb
lea di, mess2
mov ax, 2020H
mov cx, 5
cld
rep stosw
4.LODS 从串取指令
LODS SRC load from string
LODSB (字节)
LODSW (字)
执行操作:
字节操作:(AL)←((SI)), (SI)←(SI)±1
字操作:(AX)←((SI)), (SI)←(SI)±2
注意:
* LODS 指令一般不与 REP 联用
* 源串一般在数据段中(允许使用段跨越前缀来修改),目的串必须在附加段中
* 不影响条件标志位
与 REPE / REPZ(REPNE / REPNZ)配合工作的
CMPS 和 SCAS
REPE / REPZ
REPNE / REPNZ
执行操作:
(1) 如 (CX)=0 或 ZF=0 (ZF=1) 则退出串操作,
否则转(2)
(2) (CX)←(CX) -1
(3) 执行 CMPS / SCAS
(4) 重复 (1) ~ (3)
5.CMPS 串比较指令
CMPS SRC, DST compare string
CMPSB (字节)
CMPSW (字)
执行操作:
(1) ((SI)) - ((DI))
根据比较结果置条件标志位:相等 ZF=1
不等 ZF=0
(2) 字节操作:(SI)←(SI)±1, (DI)←(DI)±1
字操作: (SI)←(SI)±2, (DI)←(DI)±2
6.SCAS 串扫描指令
SCAS DST scan string
SCASB (字节)
SCASW (字)
执行操作:
字节操作:(AL) - ((DI)), (DI)←(DI)±1
字操作: (AX) - ((DI)), (DI)←(DI)±2