分类:
2005-09-16 10:21:45
1、标志位操作指令
这一类指令可用来对CF、DF和IF三个标志进行设置,除影响所设置的标志外,均不影响其他标志。
(1)进位标志操作指令
CLC ;复位进位标志:CF←0
STC ;置位进位标志:CF←1
CMC ;求反进位标志:CF←~CF
(2)方向标志操作指令
CLD ;复位方向标志:DF←0
STD ;置位方向标志:DF←1
在串操作指令使用之前,通常应先设置方向标志,以决定SI/DI是增量还是减量。
(3)中断标志操作指令
CLI ;复位中断标志,禁止可屏蔽中断:IF←0
STI ;置位中断标志,允许可屏蔽中断:IF←1
许多指令的执行都会影响标志,上述指令提供了直接改变CF、DF、IF的方法。标志寄存器中的其他标志,需要用LAHF/SAHF或PUSHF或POPF指令间接改变。
2、CPU状态控制指令
这类指令用来控制CPU的状态,使8086暂停、等待或控操作等
(1)空操作指令NOP
NOP
该指令不执行任何操作,但占用一个字节存储单元,空耗一个指令周期。该指令常用于程序调试。
(2)段超越前缀指令
SEG: ;即CS:、SS:、DS:、ES,取代默认段寄存器
在允许段超越的存储器操作数之前,使用段超越前缀指令,将不采用默认的段寄存器,而是采用制定的段寄存器寻址操作数。
(3)封锁前缀指令LOCK
LOCK ;封锁总线
这是一个指令前缀,可放在任何指令前。这个前缀使得在这个指令执行时间内,8086处理器的封锁输出引脚有效,即把总线封锁,使别的控制器不能控制总线;直到该指令执行完后,总线封锁解除。当CPU与其他处理机协同工作时,该指令可以避免破坏有用信息。
(4)暂停指令HLT
HLT ;进入暂停状态
暂停指令使CPU进入暂停状态,这时CPU不进行任何操作。当CPU发生复位或来自外部的中断时,CPU脱离暂停状态。HLT指令可用于程序中等待中断。当程序必须等待中断时,可用HLT,而不必用软件死循环。然后,中断使CPU脱离暂停状态,返回执行HLT的下一条指令。注意,该指令在PC机中将引起所谓的“死机”,一般的应用程序不要使用。
(5)交权指令ESC
ESC 6位立即数,REG/MEM ;把浮点指令交给浮点处理器
交权指令ESC把浮点指令交给浮点处理器执行。为了提高系统的浮点运算能力,8086系统中可加入浮点运算协处理器8087。但是,8087的浮点指令是和8086的整数指令组合在一起的,8086主存中存储8087的操作码及其所需要的操作数。当8086发现是一条浮点指令时,就利用ESC指令将浮点指令交给8087执行,6位立即数即为负点指令的操作码,REG/MEM指示浮点指令的操作数。当操作数为寄存器时,它的编码也作为操作码;如果为存储器操作数,CPU读出这个操作数送给协处理器。
(6)等待指令WAIT
WAIT ;进入等待状态
WAIT指令在8086的测试输入引脚为高电平无效时,使CPU进入等待状态;这时,CPU并不作任何操作。测试为低电平有效时,CPU脱离等待状态,继续执行WAIT指令后面的指令。
浮点指令经由8086CPU处理器发往8087,并与8086本身的整数指令在同一个指令序列;而8087执行浮点指令较慢,所以8086必须与8087保持同步。8086就是利用WAIT指令和测试引脚实现与8087同步运行的。