菜鷄日記——《汇编与接口技术》80X86指令系统 之 控制转移指令 & 处理机控制指令

控制转移指令 

  1. 转移指令(无条件转移指令、条件转移指令)
  2. 循环指令
  3. 子程序控制和返回指令
  4. 中断与中断返回指令
  • 无条件转移指令:JMP

段内直接短转移:JMP SHORT OPR    执行操作:IP←IP+8位位移量    (即255B的位移范围)

段内直接近转移:JMP NEAR PTR OPR    执行操作:IP←IP+16位位移量    (即64KB的位移范围)

段内间接转移:JMP WORD PTR OPR    执行操作:IP←(通用寄存器) 或 IP←(OPR)

1)前两条的位移量为目的地址与OPR地址的相对位移量

2)最后一条目的地址存储在OPR中,为有效地址

  • 条件转移指令:JZ/JNZ、JE/JNE、JS/JNS、JO/JNO、JP/JNP、JB/JNB、JL/JNL、JBE/JNBE、JLE/JNLE、JCXZ
 指令格式转移条件说明
单个标志条件转移JZ(JE) OPRZF=1=E euqal
JNZ(JNE) OPRZF=0!=N not
JS OPRSF=1负数 
JNS OPRSF=0非负 
JO OPROF=1溢出 
JNO OPROF=0没溢出 
JP OPRPF=1  
JNP OPRPF=0  
JC OPRCF=1< 
JNC OPRCF=0>= 
两个无符号数比较JB(JNAE,JC) OPRCF=1< 
JNB(JAE,JNC) OPRCF=0>= 
JBE(JNA) OPRCF∨ZF=1<= 
JNBE(JA) OPRCF∨ZF=0> 
两个带符号数比较JL(JNGE) OPRSF⊕OF=1<G greater
JNL(JGE) OPRSF⊕OF=0>= 
JLE(JNG) OPR(SF⊕OF)∨ZF=1<=L less
JNLE(JG) OPR(SF⊕OF)∨ZF=0> 
测试CX寄存器JCXZ OPRCX=0 Z zero

注意:只能使用段内直接寻址(8位位移量),超过60条指令要谨慎使用

  •  循环指令:LOOP、LOOPZ/LOOPE、LOOPNZ/LOOPNE

循环指令:LOOP OPR    测试条件:CX≠0

为零或相等时循环:LOOPZ(LOOPE) OPR    测试条件:CX≠0且ZF=1

不为零或不相等时循环:LOOPNZ(LOOPNE) OPR    测试条件:CX≠0且ZF=0

执行操作:CX←CX-1,然后判断若满足条件则 IP←IP+8位位移量,循环;否则 IP 不变,退出循环

1)CX中存放循环次数,每次自动减一

2)循环嵌套时注意用栈保护CX值

  • 子程序控制和返回指令:CALL、RET

段内直接近调用:CALL DST(DST为子程序名)

                             执行操作:先SP←SP-2,(SP+1),(SP)←IP保护当前程序的下条指令地址,后IP←IP+16位位移量

段内间接近调用:CALL DST(DST为寄存器如BX,或存储器地址,存储的是目的程序的EA)

                             执行操作:先SP←SP-2,(SP+1),(SP)←IP保护当前程序的下条指令地址,后IP←(DST)

段间远调用:CALL FAR DST(DST为子程序名)

                     执行操作:先SP←SP-2,(SP+1),(SP)←IP保护当前程序的下条指令地址,后IP←(DST)

                     注意:只能调用段外声明为FAR的子程序,如sample PROC FAR

段内近返回:RET    执行操作:IP←(SP+1),(SP),SP←SP+2

段内带立即数返回:RET EXP    执行操作:IP←(SP+1),(SP),SP←SP+EXP

  • 中断与中断返回指令:INT、INTO、IRET

中断指令是隐指令,并不是指令系统中的一条真正指令,它没有操作码

             

中断向量存放于内存中的中断向量区(从00000H号地址开始),是中断服务程序的入口地址,从0开始编号,每个中断向量4字节(32位),低位存IP,高位存CS。中断时,按照中断类型编号从中断向量表中取出相应的值赋给CS和IP(又硬件自动完成,不可见,但是可以修改中断响亮表中的值)。由于中断的复杂,将在后面的接口部分专门介绍。在80X86中reset不算是中断,不在中断向量表内,reset时CS=0FFFFH,IP=0000H,在内存FFFF0H处存放了一个JMP指令。

中断指令:INT TYPE INT(隐藏TYPE为3,TYPE不是操作码)

                  执行操作:SP←SP-2,(SP+1),(SP)←FLAGS,

                                    SP←SP-2,(SP+1),(SP)←CS,

                                    SP←SP-2,(SP+1),(SP)←IP,(隐含操作)

                                    IP←(TYPE*4),CS←(TYPE*4+2)

溢出中断指令:INTO

                         执行操作:若OF=1,(隐含操作),IP←(10H),CS←(12H)

中断返回指令:IRET

                         执行(隐含)操作:IP←(SP+1),(SP),SP←SP+2

                                                         CS←(SP+1),(SP),SP←SP+2

                                                         FLAGS←(SP+1),(SP),SP←SP+2

1)TYPE(0~255)是中断类型号

2)INT指令把IF和TF置0,但不影响其他标志位


标识处理指令

CLC、STC、CMC:对CF标志位清零/置位/取反

CLD、STD:字符串移动方向增/减标志

CLI、STI:开/关中断 


处理机控制指令

控制CPU工作方式,用于多任务处理

  • 空操作指令:NOP    

延迟下一条指令的执行,不影响任何标志位

  • 等待指令:WAIT    

使CPU处于等待状态,直到协处理器完成运算,并用一个重启信号唤醒CPU为止,不影响任何标志位

(协处理器不算外设,而是另一个FPU,浮点运算处理器)

  • 暂停指令:HLT

在等待中断信号时,使CPU处于暂停工作状态(低功耗模式)CS:IP指向下一条待执行的指令,但不进行任何操作,保持先前操作中所有寄存器的状态不变 ,当产生了中断信号,转入中断处理程序,在中断处理程序执行完后,中断返回指令IRET并唤醒CPU执行下条指令,该指令指令不影响任何标志位

  • 封锁数据指令:LOCK INSTRUCTION

该指令是一个前缀指令形式,在其后面跟一个具体的操作指令,保证在该指令执行过程中,禁止协处理器修改数据总线上的数据,起到独占总线的作用,该指令不影响任何标志位​​​​​​​

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值