8086指令系统 串操作指令

Posted _DiMinisH

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了8086指令系统 串操作指令相关的知识,希望对你有一定的参考价值。

串操作指令

串操作指令特点
  1. 源串(源操作数)的偏移地址是DS:SI, 允许段重设
  2. 目标串(目标操作数)的偏移地址是ES:DI, 不允许段重设
  3. 串的长度值放在CX寄存器中
  4. 串操作指令本身可实现地址指针的自动修改, 修改方向与DF的状态有关, DF = 1按减地址(从高地址向减地址),DF = 0按增地址(从低地址向高地址),对字节(8位)操作加1, 对字(16位)操作加2
  5. 可以在串操作指令前加重复前缀, 若使用了重复前缀, CX寄存器的值会自动减1

   源串: DS/SEGMENT:SI
   目标串: ES:DI
   重复次数: CX
   操作方向: DF

指令作用
MOVSBDS:[SI] -> ES:[DI]   1次8位
MOVSWDS:[SI] -> ES:[DI]   1次16位
CMPSBDS:[SI] - ES:[DI]   1次8位
CMPSWDS:[SI] - ES:[DI]   1次16位
SCASBAL - ES:[DI]
SCASWAX - ES:[DI]
LODSBDS:[SI] -> AL, SI + 1 或 SI - 1
LODSWDS:[SI] -> AX, SI + 1 或 SI - 1
STOSBAL -> ES:[DI], DI + 1 或 DI - 1
STOSWAL -> ES:[DI], DI + 1 或 DI - 1

1. 串操作指令重复操作前缀

前缀名称重复条件停止条件
REP无条件重复前缀CX ≠ 0CX = 0
REPE / REPZ有条件重复前缀CX ≠ 0, 且ZF = 1-
REPNE / REPNZ有条件重复前缀CX ≠ 0, 且ZF = 0-

直到CX = 0或满足指定条件, 重复操作才停下来

(1). 无条件重复前缀

REP

重复执行指令规定的操作, 直到CX = 0

(2). 有条件重复前缀

REPE
REPZ

CX ≠ 0, 且ZF = 1时重复

(3). 有条件重复前缀

REPNE
REPNZ

CX ≠ 0, 且ZF = 0时重复

2. 串传送指令

MOVS BYTE/WORD PTR [DI], BYTE/WORD PTR [SI]

功能:
  将SEGMENT:[SI] 对应的指定字长的数据复制到 ES:[DI] 对应的单元中

MOVSB

功能:
  将DS:[SI] 对应的1个单元的数据复制到 ES:[DI] 对应的单元中

MOVSW

功能:
  将DS:[SI] 对应的2个单元的数据复制到 ES:[DI] 对应的单元中

3. 串比较指令

CMPS BYTE/WORD PTR [DI], BYTE/WORD PTR [SI]

功能:
  将SEGMENT:[SI] 单元指定字长的数据 与 ES:[DI] 对应的单元中的数据比较, 结果反映在状态标志位

CMPSB

功能:
  将DS:[SI] 对应的1个单元的数据 与 ES:[DI] 对应的单元中的1个数据比较, 结果反映在状态标志位

CMPSW

功能:
  将DS:[SI] 对应的2个单元的数据 与 ES:[DI] 对应的单元中的2个数据比较, 结果反映在状态标志位

  串比较指令常与条件重复前缀REPZ(REPZ)或REPNE(REPNZ)连用, 加重复前缀的情况下吗串比较指令结束有两种可能:

  1. 不满足条件前缀所要求的条件
  2. CX = 0

串比较指令会影响 ZF 的状态

重复前缀重复条件
REPZ(REPZ)ZF = 1
REPNE(REPNZ)ZF = 0

4. 串扫描指令

SCAS OPRD

功能:
  OPRD是目标串, 用AL或AX的值与目标串(由ES:DI指定)中的字节或字比较, 结果影响状态标志位, 当不相等时, ZF = 0

SCASB
一次比较8位(1字节)

SCASW
一次比较16位(2字节)

5. 串装入指令

LODS OPRD

功能:
  OPRD是源串, 由DS:[SI]所指向的源串中的字节或字, 取到AL或AX, 并在之后, DF的值自动修改指针SI

LODSB
一次装载8位(1字节)

LODSW
一次装载16位(2字节)

6. 串存储指令

STOS OPRD

功能:
  OPRD是目标串, 把AL或AX中的数据存储到ES:DI指向的存储单元中, 并在此之后, DF的值会自动修改DI的值

STOSB
一次存储8位(1字节)

STOSW
一次存储16位(2字节)

以上是关于8086指令系统 串操作指令的主要内容,如果未能解决你的问题,请参考以下文章

16位汇编第八讲指令第四讲

复习8086汇编指令

8086汇编 rep 指令

8086汇编 rep 指令

8086指令系统通用数据传送指令

8086、8088汇编指令大全