微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 8086指令系统---控制转移指令(二)

8086指令系统---控制转移指令(二)

时间:11-27 来源:互联网 点击:

2、单击菜单project->

3、单击Porcessor Views->

5、单击Execute->

6、单击Execute->



  如图3.12所示,主程序中的两条PUSH指令将数据30和40压入堆栈,CALL指令执行后,返回地址000B又压入堆栈,紧接着程序控制转移到子程序ADDM。子程序中的PUSH指令又使BP的值进栈,此时SP指向栈顶0FFA。MOV指令将0FFA传送给BP,使BP作为寻址堆栈数据的指针。(BP+4)指向的是40,(BP+6)指向的是30,取出数据后用POP指令恢复了BP原先的值,此时,(SP)=0FFC,这是RET 4指令执行前的堆栈状态。

  执行RET 4指令时,先使返回地址出栈:(IP)←000B,(SP)←0FFC+2=0FFD,然后,(SP)+4=0FFD+4=1000,结果使SP跳过了堆栈数据而回到了原始位置。

  5 中断及中断返回指令

 INT n中断指令(interrupt),n为中断类型号

 IRET 中断返回指令(return from interrupt)

 INTO 溢出则中断(中断类型为4)

INTn 中断指令(interrupt),n为中断类型号
  执行操作:① 入栈保存FLAGS:(SP) ← (SP)-2,((SP)) ← (FLAGS)
       ② 入栈保存返回地址:(SP) ← (SP)-2,((SP)) ← (CS)
                  (SP) ← (SP)-2,((SP)) ← (IP)
       ③ 转中断处理程序:(IP) ← (n×4)
                 (CS) ← (n×4+2)

 IRET中断返回指令(return from interrupt)
  执行操作:① 返回地址出栈:(IP) ← ((SP)),(SP) ← (SP)+2
                (CS) ← ((SP)),(SP) ← (SP)+2
       ② FLAGS出栈:(FLAGS) ← ((SP)),(SP) ← (SP)+2

  INTO溢出则中断(中断类型为4)
  执行操作:若OF=1(有溢出),则:
       ① 入栈保存FLAGS:(SP) ← (SP)-2,((SP)) ← (FLAGS)
       ② 入栈保存返回地址:(SP) ← (SP)-2,((SP)) ← (CS)
                  (SP) ← (SP)-2,((SP)) ← (IP)
       ③ 转中断处理程序:(IP) ← (4×4)= (10H)
                 (CS) ← (4×4+2)= (12H)

  中断指令用于调用中断例行程序(又称中断服务程序),这是一种远调用。完成各种功能的中断例行程序都有一个编号,称为中断类型号。各种中断例行程序的入口地址按中断类型号的顺序存储在一个表中,这个表称为中断向量表。每个中断例行程序的入口地址占用4个字节,因此,它在中断向量表中的地址可用中断类型号乘4来求得。执行中断指令时,首先要入栈保存调用程序执行的现场,即当时的标志寄存器的值和断点的地址,然后,根据中断类型号(n×4)到中断向量表中取得中断例行程序的入口地址,分别送给IP和CS,以实现调用中断例行程序的功能。

  中断返回指令IRET的操作和INT指令相反,即从堆栈中取出返回地址和标志位,然后返回到被中断的程序。
INTO指令隐含的中断类型号为4,因此保存断点地址和标志位后,从中断向量表的10H和12H两个字中取出中断例行程序的入口地址,从而转去运行中断例行程序。

  INT指令(包括INTO)执行后,把IF和TF置0,但不影响其它标志位。

 6 处理机控制指令

  处理机控制指令包括一组置0或置1标志位的指令,还有一些控制处理机状态的指令。

 6.1 标志位处理指令

  这一组指令分别对标志位CF、DF、IF执行置0、置1或求反的操作,如,CLD指令执行的操作是:DF←0;STD执行的操作是:DF←1。

  标志位处理指令只影响本指令指定的标志,而不影响其它标志位。

  ⑴ 标志位处理指令     ⑵ 处理机控制指令
      CLC CF置0          NOP 无操作
      STC CF置1          HLT 停机
      CMC CF求反          WAIT 等待
      CLD DF置0          ESC 转义
      STD DF置1          LOCK 封锁
      CLI IF置0
      STI IF置1

 6.2 处理机控制指令

  NOP 无操作指令(no operation)

  HLT 停机指令(halt)

  WAIT 等待指令(wait)

  ESC mem 转义指令(escape)

  LOCK前缀封锁(lock)

NOP 无操作指令(no operation)
  执行操作:不执行任何操作,其机器码占用1个字节单元,执行时间为3个时钟周期,因此,该指令的作用表现在时间和空间上。时间上它可使上下两条指令的执行有一点间隔,这使某些指令的执行,特别是控制硬件接口的指令因为有一点延时而增加可靠性。空间上它的位置可在调试指令时用其它指令来代替。

  HLT 停机指令(halt)
  执行操作:使处理机停止软件的执行并等待一次外部中断的到来,中断结束后处理机继续执行下面的程序。使用该指令的目的通常是为了保持外部硬件中断与软件系统的同步。

  WAIT 等待指令(wait)
  执行操作:测试微处理器的BUSY/TEST管脚,如果执行WAIT指令时,BUSY/TEST=1(指示不忙),则继续执行下一条指令。如果执行WAIT指令时,BUSY/TEST=0(指示忙),则微处理器等待直到BUSY/TEST管脚变为1。
  
  ESC mem 转义指令(escape)
  执行操作:mem指定存储单元,执行ESC指令时,从存储器取得指令或操作数通过总线送给8087~80387数值协处理器。协处理器能处理算术运算、函数运算、对数运算等数值运算,其运算速度比使用常规指令写的软件快的多。

  LOCK前缀 封锁(lock)
  执行操作:指令前加LOCK,使得在锁定指令期间保持锁存信号LOCK=0,以禁止外部总线上的主控制器或系统其它部件。例如,LOCK MOV AL,[SI]执行时,总线封锁直至MOV指令执行完毕。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top