DJ12-2-4 串操作指令
创始人
2024-02-28 08:49:57
0

目录

1. REP 重复前缀

2. 串操作指令的基本概念

3. 串操作指令的指令类型

(1)串传送指令 MOVS

(2)串传送指令 CMPS

(3)串扫描指令 SCAS

(4)串装入指令 LODS

(5)串存储指令 STOS


 

1. REP 重复前缀

 (1)REP 无条件重复前缀

重复执行规定的操作,直至CX=0。

(2)REPE/REPZ 有条件重复前缀

相等或结果为 0 时重复,即 ZF = 1,并且 CX ≠ 0 。

(3)REPNE/REPNZ 有条件重复前缀

不相等或结果不为 0 时重复,即 ZF = 0,并且 CX ≠ 0 。

REP 重复前缀操作不影响标志位。

先执行串操作指令,串操作指令可能会影响标志位。然后 CX - 1,并判断条件。 

执行流程:

  • 执行串操作指令(会影响 FLAGS)
  • CX - 1(不会影响 FLAGS)
  • 判断 CX 和 ZF 是否仍满足条件

 

 

2. 串操作指令的基本概念

(1)定义

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

串操作指令:就是用来对串中每个字符或数据做同样操作的指令。

特点:每执行一次操作后自动修改指针,再执行下一次操作。

串操作指令是8086指令系统中唯一能直接处理源和目标操作数都在存储单元的指令。

(2)共同特点

① 源串默认为数据段,允许段重设,偏移地址用 SI 寄存器指定,即源串指针为 DS:SI。

② 目的串默认为附加段,不允许段重设,偏移地址用 DI 寄存器指定,即目的串指针为 ES:DI。

③ 串长度值放在 CX 寄存器中。

④ 在对每个字节或字操作后,SI 和 DI 寄存器的内容自动修改。修改方向与标志位 DF 有关:

  • 若 DF = 0,SI 和 DI 按地址增量方向修改;
  • 若 DF = 1,SI 和 DI 按地址减量方向修改。

对字节操作加/减 1,对字操作加/减 2 。

⑤ 可以在串操作指令前使用重复前缀,在每次串操作后 CX 的内容自动减 1,直至 CX = 0 或不满足指定的条件为止。

 

 

3. 串操作指令的指令类型

(1)串传送指令 MOVS

格式:MOVS  OPRD1,OPRD2

实际使用:

  • MOVSB  OPRD1,OPRD2:一次完成一个字节的传送
  • MOVSW  OPRD1,OPRD2:一次完成一个字的传送

执行:

  • DS:[SI] → ES:[DI]
  • SI + n → SI,DI + n → DI

MOVS 指令不影响标志位,常用无条件重复前缀 REP 联合使用。

加上 REP 后执行流程:

  • 执行串操作指令(会影响 FLAGS)
  • CX - 1(不会影响 FLAGS)
  • 判断 CX 是否仍满足条件

 

例题

将数据段 2000H:1200H 地址开始的 100 个字节传送到 6000H:0000H 开始的内存单元。 

 

 

(2)串传送指令 CMPS

格式:CMPS  OPRD1,OPRD2

实际使用:

  • CMPSB  OPRD1,OPRD2:按字节进行比较
  • CMPSW  OPRD1,OPRD2:按字进行比较

执行:

  • DS:[SI] - ES:[DI](不会改变操作数本身)
  • SI + n → SI,DI + n → DI

这里是源 - 目的,其实无所谓谁减谁。

CMPS 指令要影响标志位。

CMPS 指令常与重复前缀 REPE/REPZ 或 REPNE/REPNZ 联合使用,用来检查两个字符串是否相等或不相等:

  • REPE/REPZ,若 ZF = 1 且 CX ≠ 0,则重复比较。
  • REPNE/REPNZ,若 ZF = 0 且 CX ≠ 0,则重复比较。

ZF 位取决于串比较的结果。

例题

比较两个字符串是否相同,并找出其中第一个不相同字符的地址,将该地址送 BX,不相同的源字符送 AL。字符串长度均为 200 字节,M1 为源串起始偏移地址,M2 为目的串起始偏移地址。

 

 

 

(3)串扫描指令 SCAS

格式:SCAS  OPRD

实际使用:

  • SCASB  OPRD:按 AL 内容对目的串进行扫描
  • SCASW  OPRD:按 AX 内容对目的串进行扫描

执行:

  • AL/AX - ES:[DI](不会改变操作数本身)
  • DI + n → DI(不会改变 SI 寄存器)

累加器 AL/AX 作源操作数,ES:[DI] 作目的操作数。

SCAS 指令要影响标志位。

 

例题

在 ES 段中从 2000H 单元开始存放了 10 个字符,编程计数这串字符中有多少个 “A”,并将计数值存入寄存器 BX 中。 

(必考)双重循环

 

 

(4)串装入指令 LODS

格式:LODS  OPRD

实际使用:

  • LODSB  OPRD:将源串按字节装入 AL
  • LODSW  OPRD:将源串按字装入 AX

执行:

  • DS:[SI] → AL/AX
  • SI + n → SI(不会改变 DI 寄存器)

DS:[SI] 作源操作数,累加器 AL/AX 作目的操作数。

LODS 指令不影响标志位。

一般不带重复前缀指令,避免后面装入的数据覆盖前面装入的数据。

 

 

 

(5)串存储指令 STOS

格式:STOS  OPRD

实际使用:

  • STOSB  OPRD:将 AL 内容按字节存入目的串
  • STOSW  OPRD:将 AX 内容按字存入目的串

执行:

  • AL/AX → ES:[DI]
  • DI + n → DI(不会改变 SI 寄存器)

累加器 AL/AX 作源操作数,ES:[DI] 作目的操作数。

STOS 指令不影响标志位。

STOS 指令利用重复前缀 REP 可对连续存储单元存入相同的值。

 

例题

用串存储指令实现对 6000H:1200H 开始的 100 个字单元内容清零。

相关内容

热门资讯

《全民阅读促进条例》将施行,多... 一纸条例,用法治护航全民阅读;满城书香,焕发青春中国活力。近日,《全民阅读促进条例》(以下简称《条例...
原创 戴... 最近,关于前国脚戴琳的欠薪丑闻无疑是引发了球迷的持续关注,从10月25日,媒体人李平康率先爆料,晒出...
思想政治工作条例最新修订内容,... 思想政治工作条例最新修订内容,思想政治工作条例全文下载 思想政治工作条例最新修订,全文下载与深度解读...
CBA潜力赛为何打成“老将赛”... 计时钟归零,双方教练握手致意,观众开始退场,CBA联赛的正赛宣告结束。然而球场并未就此沉寂,替补席上...
“手术钻头断裂遗留患者体内”,... 12月21日,湖南祁阳市卫生健康局发布情况通报称,近日,有媒体报道祁阳市中医医院发生骨科手术钻头断裂...
代驾纠纷 代驾时撞伤行人、车辆发生故障…… 这些都和车主无关,应由代驾赔偿? 观点: 使用代驾服务并非将所有...
公司股东与妻子分居期间出轨女下... 近日据报道,宁夏永宁县人民法院一审查明公司股东李某乙在与妻子李某甲分居期间,与公司女员工马某某存在不...
动物学家、律师和创作者,Thi... 12月21日,以“一起·了不起”为主题的2025 ThinkPad黑FUN礼在京举办。活动现场,律师...
徐奇渊:扩内需与对外政策紧密相... 近日,中国海关总署发布了一组数据令人关注:2025年前11个月,我国货物贸易顺差达到1.08万亿美元...