串操作指令讲解(MOVS/CMPS/SCAS/LODS/STOS)

串和串操作                                                                     看一下串操作指令的具体用法

存储器中的地址连续的若干单元的字符或数据称为字符串或数据串。

串操作指令就是用来对串中每个字符或数据进行操作的指令。

串指令既可处理字节串,也可处理字串,并在每完成一个字节(或字)的操作后

          能够自动修改指针,以便执行下一个字节(或字)的操作。

串指令可完成两个存储单元之间的传送和比较操作(也只有串指令才可以)。

 使用串指令的程序段结构如下:

      ...

设置源串指针(DS,SI)

设置目的串指针(ES,DI)

设置重复操作次数(CX)--仅执行1次时可省略

设置操作方向(DF)

重复前缀(REP/REPZ/REPNZ)--仅执行1次时可省略

串操作指令(MOVS/CMPS/SCAS/LODS/STOS)

 

8086指令系统共有5条串操作指令:

串传送MOVS、串比较CMPS、串扫描SCAS、串装入LODS、串存储STOS

其基本格式如下图:



下面简述其基本用法与功能:

 1.串传送指令MOVS

  格式

        MOVSB

   或  MOVSW

   或  MOVS  dest,src

  功能及操作

   串传送指令完成两个存储单元之间的数据传送。

   ①“MOVSB / MOVSW”指令将DS:SI所指向的存储单元中的一个字节传送到ES:DI所指向的存储单元。若DF=0,则传送后SI和DI都加1(2);若DF=1,则传送后SI和DI都减1(2)。

   “MOVS dest,src”指令视操作数类型(字节或字)与“MOVSB”或“MOVSW”等价。

2.串比较指令CMPS

格式

        CMPSB

   或  CMPSW

   或  CMPS  dest,src

功能及操作 

 串比较指令与比较指令CMP的操作有点类似,CMP指令是对两个单个数据进行比较,而CMPS是对两个数据串进行比较。

 串比较指令通常和条件重复前缀REPE(REPZ)或REPNE(REPNZ)连用,用来检查两个字符串是否相等。

3.串扫描指令SCAS

 格式

        SCASB

   或  SCASW

   或  SCAS  dest

 功能及操作

SCAS指令将累加器AL(或AX)的内容与目的串(指针为ES:DI)中的字节(或字)进行比较,比较结果不改变目的操作数,只影响标志位。它执行与CMPS指令同样的不回送结果的减法操作,只是这里源操作数为AL(或AX)。

串扫描指令通常和条件重复前缀REPE(REPZ)或REPNE(REPNZ)连用,用来在字符串中搜索某个特定的关键字(把要查找的关键字放在AL(或AX),再用本指令与字符串中各字符逐一比较)。

4.串装入指令LODS

格式        

LODSB

或  LODSW

或  LODS  src

功能及操作

“LODSB”(或“LODSW”)指令把由DS:SI指向的源串中的字节(或字)装入到AL(或AX)中,并根据DF自动修改指针SI,以指向下一个要装入的字节(或字)。

“LODS src”指令视操作数类型(字节或字)与“LODSB”或“LODSW”指令等价。

字节装入指令LODSB等价于以下两条指令组合:

MOV  AL,[SI]

INC  SI       ;或DEC  SI(当DF=1)

字装入指令LODSW等价于以下三条指令组合:

MOV  AL,[SI]

INC  SI       ;或DEC  SI(当DF=1)

INC  SI       ;或DEC  SI(当DF=1)

   5.串存储指令STOS

格式       

STOSB

   或  STOSW

   或  STOS  dest

功能及操作

   “STOSB”(或“STOSW”)指令把AL(或AX)中的内容存储到由ES:DI指向的目的串中,并根据DF自动修改指针DI,以指向下一个要写入的字节(或字)存储单元。

   “STOS src”指令视操作数类型(字节或字)与“STOSB”或“STOSW”指令等价。

   字节装入指令STOSB等价于以下两条指令组合:

        MOV  ES:[DI],AL

        INC  DI       ;或DEC  DI(当DF=1)

   字装入指令STOSW等价于以下三条指令的组合:

        MOV  ES:[DI],AX

        INC  DI       ;或DEC  DI(当DF=1)

        INC  DI       ;或DEC  DI(当DF=1)

                                                                         看一下串操作指令的具体用法

你可能感兴趣的:(#xx_在学习:汇编语言)