170.串处理指令

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
View Code

 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

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/ZanderZhao/p/11052432.html