ASM16 22-23 处理机控制类指令
处理机控制类指令
- 这些指令在特定的情况下,必须使用
- 对标志位进行设置的指令
CLC
STC
CMC
CLD
STD
CLI
STI
- 对CPU状态进行控制的指令
NOP
CS:SS:DS:ES:
LOCK
HLT
ESC
WAIT
进位标志操作指令
用于任意设置进位标志
1
2
3clc ;复位进位标志:cf=0
stc ;置位进位标志:cf=1
cmc ;求反进位标志:cf=~cf
方向标志操作指令
串操作指令中,需要使用
1
2cld ;复位方向标志:df=0
std ;置位方向标志:df=1
中断标志操作指令
在编写中断服务程序时,需要控制可屏蔽中断的允许和禁止
1
2cli ;复位中断标志:if=0
sti ;置位中断标志:if=1
空操作指令
NOP
不执行任何操作,但占用一个字节存储单元,空耗一个指令执行周期NOP
常用于程序调试- 在需要预留指令空间时用
NOP
填充 - 代码空间多余时也可以用
NOP
填充 - 还可以用
NOP
实现软件延时
- 在需要预留指令空间时用
- 事实上,
NOP
和XCHG AX,AX
的指令代码一样,都是90H
1 | MyStack segment stack |
运行结果
执行完对应指令后标志会随之改变
执行完nop什么都不会改变
1 | db 20 dup(90h) |
全部都设为nop
封锁前缀指令
1 | LOCK ;封锁总线 |
- 这是一个指令前缀,可放在任何指令前
- 这个前缀使得在这个指令执行时间内,8086处理器的封锁输出引脚有效,即把总线封锁,使别的控制器不能控制总线;直到该指令执行完后,总线封锁解除
- 当CPU与其他处理器协同工作时,lock指令可用于避免破坏有用的信息。
1 | lock inc word ptr ds:[1000] |
暂停指令
1 | HLT ;进入暂停状态 |
- 暂停指令使CPU进入暂停状态,这时CPU不进入任何操作。当CPU发生复位或来自来自外部的中断时,CPU脱离暂停状态
- HLT指令可用于程序中等待中断。当程序中必须等待中断时,可用HLT,而不必用软件死循环。然后,中断使CPU脱离暂停状态,返回执行HLT的下一条指令
交权指令
1 | ESC 6位立即数,reg/mem ;把浮点指令交给浮点处理器执行 |
浮点协处理器8087指令是与8086的整数指令组合在一起的,当8086发现是一条浮点指令时,就利用ESC指令将浮点指令交给8087执行
实际编写程序编写程序时,一般采用易于理解的浮点指令助记符格式
1
2ESC 6,[SI] ;实数除法指令:FDIV dword ptr [SI]
ESC 20H,AL ;整数加法指令:FADD ST(0),ST
等待指令
1 | WAIT ;进入等待状态 |
- 8086利用WAIT指令和测试引脚实现与8087同步运行
- 浮点指令经由8086处理发往8087,并于8086本身的整数指令在同一个指令序列,而8087执行浮点的指令较慢,所以8086必须与8087保持同步
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Hexo!