设置方向标志指令
CLD、STDide
串处理指令
MOVSB / MOVSW
STOSB / STOSW
LODSB / LODSW
CMPSB / CMPSW
SCASB / SCASWpost
串重复前缀spa
REP 3d
REPE / REPZcode
REPNE / REPNZblog
与 REP 配合工做的 MOVS / STOS / LODSget
REP repeat
执行操做:
(1) 如 (CX)=0 则退出 REP,不然转(2)
(2) (CX) ← (CX) -1
(3) 执行 MOVS / STOS / LODS
(4) 重复 (1) ~ (3)string
MOVS DST, SRC move string DST目的操做数destination SRC源it
MOVSB (字节)
MOVSW (字)io
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
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
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)
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
SCAS DST scan string
SCASB (字节)
SCASW (字)
执行操做:
字节操做:(AL) - ((DI)), (DI)←(DI)±1
字操做: (AX) - ((DI)), (DI)←(DI)±2