微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 8086指令系统---串处理指令

8086指令系统---串处理指令

时间:11-27 来源:互联网 点击:
  串处理指令处理存放在存储器中的字节串或字串,串处理的方向由方向标志位DF决定,串处理指令之前可加重复前缀,在执行串处理指令时,源串的指针SI和目的串的指针DI根据DF的指示自动增量(+1或+2)或自动减量(―1或―2)。

     ⑴ 串处理指令
        MOVSB / MOVSW   串传送
        STOSB / STOSW   存串
        LODSB / LODSW   取串
        CMPSB / CMPSW   串比较
        SCASB / SCASW   串扫描

       ⑵ 串重复前缀
        REP        重复串操作
        REPE / REPZ    相等/为零时重复
        REPNE / REPNZ   不等/不为零时重复

       ⑶ 设置方向标志
        CLD        使DF=0
        STD        使DF=1

  1 设置方向标志指令

  CLD DF置0(clear direction flag)
  STD DF置1(set direction flag)

  为了处理连续存储单元中的字符串或数串,地址指针需要连续地增量或减量,指针增量或减量决定了串处理的方向。当用CLD指令使DF=0时,源串的指针SI和目的串的指针DI自动增量(+1或+2),当用STD指令使DF=1时,指针SI和DI自动减量(―1或―2)。地址指针是±1还是±2,取决于串操作数是字节还是字,处理字节串时,地址指针每次+1或―1,处理字串时,地址指针每次+2或―2。

 2 串处理指令
  
  MOVSB / MOVSW 串传送(move string byte/word)
  执行操作:
  (ES:DI)←(DS:SI)
  (SI)←(SI)±1(字节)或±2(字)
  (DI)←(DI)±1(字节)或±2(字)

  STOSB / STOSW 存串(load from string byte/word)
  执行操作:
  (ES:DI)←(AL)或(AX)
  (DI)←(DI)±1(字节)或±2(字)

  LODSB / LODSW 取串(store into string byte/word)
  执行操作:
  (AL)或(AX)←(DS:SI)
  (SI)←(SI)±1(字节)或±2(字)

  CMPSB / CMPSW 串比较(compare string byte/word)
  执行操作:
  (DS:SI)-(ES:DI),根据比较的结果设置条件码
  (SI)←(SI)±1(字节)或±2(字)
  (DI)←(DI)±1(字节)或±2(字)

  SCASB / SCASW 串扫描(scan string byte/word)
  执行操作:
  (AL)-(ES:DI)或(AX)-(ES:DI),根据扫描比较的结果设置条件码
  (DI)←(DI)±1(字节)或±2(字)

 这组串处理指令用于处理连续存储单元中的字操作数或字节操作数,它们有几个共同点:

  1. 它们一般都分两步执行,第一步完成处理功能,如传送、存取、比较等。第二步进行指针修改,以指向下一个要处理的字节或字。

  2. 源串必须在数据段中,目的串必须在附加段中,串处理指令隐含的寻址方式是SI和DI寄存器的间接寻址方式。源串允许使用段跨越前缀来指定段。

 3. 串处理的方向取决于方向标志DF,DF=0时,地址指针SI和DI增量(+1或+2);DF=1时,地址指针SI和DI减量(-1或-2)。程序员可以使用指令CLD和STD来建立方向标志。

  4. MOVS、STOS、LODS指令不影响条件码,CMPS、SCAS指令根据比较的结果设置条件码。

  与串传送指令MOVS和串存入指令STOS联用的重复前缀是REP,取串指令LODS一般不加重复前缀。 与串比较指令和串扫描指令联用的重复前缀是REPE(REPZ)或REPNE(REPNZ)。

 3 串重复前缀

  REP 重复执行串指令,(CX)=重复次数
  执行操作:
  ① (CX)=0时,串指令执行完毕,否则执行② ~ ④
  ② (CX)←(CX)-1
  ③ 执行串指令(MOVS或STOS)
  ④ 重复执行①

  REPE / REPZ 相等/为零时重复执行串指令,(CX)=比较/扫描的次数
  执行操作:
  ① (CX)=0或ZF=0时,结束执行串指令,否则继续② ~ ④
  ② (CX)←(CX)-1
  ③ 执行串指令(CMPS或SCAS)
  ④ 重复执行①

  REPNE / REPNZ 不等/不为零时重复执行串指令,(CX)=比较/扫描的次数
  执行操作:
  ① (CX)=0或ZF=1,结束执行串指令,否则继续② ~ ④
  ② (CX)←(CX)-1
  ③ 执行串指令(CMPS或SCAS)
  ④ 重复执行①

  REP对其后的串指令(MOVS或STOS)只有一个结束条件,即重复次数(CX)=0。在进行串比较和串扫描时,串指令前应加前缀REPE(REPZ)或REPNE(REPNZ),这两条重复前缀用重复次数(CX)和比较结果(ZF)来控制串指令的结束。当(CX)=0时,说明每个串数据都比较(或扫描)过了,此时串操作正常结束;当因ZF=1或0而结束串操作时,说明在满足比较结果相等或不等的条件下,可提前结束串操作。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top