movsw 汇编_汇编语言期末复习笔记(六)

本文详细介绍了8086汇编中的串操作指令,包括MOVSB/MOVSW、STOSB/STOSW、LODSB/LODSW、CMPSB/CMPSW、SCASB/SCASW,以及重复前缀指令如REP、REPZ/REPNZ。此外,还讲解了封锁前缀指令LOCK、暂停指令HLT、交权指令ESC和等待指令WAIT等处理机控制类指令。
摘要由CSDN通过智能技术生成

第二章 8086的指令系统(下)

写在前面:这一部分开始复习8086指令系统中关于串操作指令和处理机控制类指令的部分。如有错误欢迎指正,感谢!

1.串寻址方式源操作数用寄存器SI寻址,默认在数据段DS中,但允许段超越:DS:[SI]。

目的操作数用寄存器DI寻址,默认在附加段ES中,不允许段超越:ES:[DI]

每执行一次串操作指令,SI和DI将自动修改:

执行CLD指令后,DF=0,对于字节串,地址指针+1,对于字串,地址指针+2;

执行STD指令后,DF=1,对于字节串,地址指针-1,对于字串,地址指针-2。对于字串,DI要为偶数,地址对齐。

2.串传送指令MOVSB/MOVSW

将串从原地址传送到目的地址。字节串传送MOVSB

①ES:[DI]←DS:[SI](一个字节)

②SI←SI±1,DI←DI±1字串传送MOVSW

①ES:[DI]←DS:[SI](两个字节)

②SI←SI±2,DI←DI±2

3.串存储指令STOSB/STOSW

将AL或者AX数据传送到目的地址。字节串存储STOSB

①ES:[DI]←AL

②DI←DI±1字串存储STOSW

①ES:[DI]←AX

②DI←DI±2

4.串读取LODSB/LODSW

把指定主存单元的数据传送给AL或AX。字节串读取LODSB

①AL←DS:[SI]

②SI←SI±1字串读取LODSW

①AL←DS:[SI](两个字节)

②SI←SI±2

4.串比较CMPSB/CMPSW

将主存中源操作数减去目的操作数,以便设置标志,进而比较两操作数之间的关系。字节串比较CMPSB

①DS:[SI]-ES:[DI]

②SI←SI±1,DI←DI±1字串比较CMPSW

①DS:[SI]-ES:[DI](两个字节)

②SI←SI±2,DI←DI±2

5.串扫描SCASB/SCASW

将AL/AX减去目的操作数,以便设置标志,进而比较AL/AX与操作数之间的关系。可用于在字符串中查找某个字或字节。字节串扫描SCASB

①AL-ES:[DI]

②DI←DI±1字串扫描SCASW

①AL-ES:[DI](两个字节)

②DI←DI±2

6.重复前缀指令

串操作指令每次只对一个字节或一个字量进行操作,但是串操作指令前可以加一个重复前缀,使得串操作指令重复进行。重复次数是CX寄存器的值。

7.REP重复前缀指令

当CX≠0时,继续进行。一般配合不影响标志位的MOVSB/MOVSW,STOSB/STOSW和LODSB/LODSW使用。

rep movsb

;等价于以下代码

again: movsb

dec cx

jnz again

8.REPZ/REPNZ重复前缀指令

一般配合影响标志位的CMPSB/CMPSW和SCASB/SCASW使用。可用于查找字串是否在主串中。REPZ/REPE:当CX≠0且ZF=1时,继续进行。

REPNZ/REPNE:当CX≠0且ZF=0时,继续进行。

9.空操作指令NOP

不执行任何操作,但占用一个字节存储单元,空耗一个指令执行周期。常用于程序调试:在需要预留指令空间时用NOP填充。

代码空间多余时也可以用NIP填充。

还可以用NOP实现软件延时等。

NOP指令和XCHG AX,AX的机器码都是90H。实际上,8086就是将NOP当做XCHG AX,AX处理。并且由于诸如XCHG BX,BX之类都至少占用两个字节,所以当做XCHG AX,AX最合适。在DOSBOX中验证

10*.封锁前缀指令LOCK

这是一个指令前缀,可以放在任何指令前。

在这个指令执行时,8086处理器的封锁输出引脚有效,即把总线封锁,使别的控制器不能控制总线;直到该指令执行完后,总线封锁解除。

11*.暂停指令HLT

暂停指令使CPU进入暂停状态,这时CPU不进行任何操作。当CPU发生复位或来自外部的中断时,CPU脱离暂停状态。

HLT指令可用于程序中等待中断。当程序中必须等待中断时,可用HLT,而不必用软件死循环。然后,中断使CPU脱离暂停状态,返回执行HLT的下一条指令。

12*.交权指令ESC

ESC 6位立即数,reg/mem

把浮点指令交给浮点处理器执行。

浮点协处理器8087指令是与8086的整数指令组合在一起的,当8086发现是一条浮点指令时,就利用ESC指令将浮点指令交给8087执行。

13*.等待指令WAIT

8086利用WAIT指令和测试引脚实现与8087同步运行。

浮点指令经由8086处理发往8087,并与8086本身的整数指令在同一个指令序列;而8087执行浮点指令较慢,所以8086必须与8087保持同步。

感谢阅读!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值