新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 8086指令系統(tǒng)---控制轉(zhuǎn)移指令(二)

8086指令系統(tǒng)---控制轉(zhuǎn)移指令(二)

作者: 時(shí)間:2016-11-27 來源:網(wǎng)絡(luò) 收藏


  執(zhí)行RET 4指令時(shí),先使返回地址出棧:(IP)←000B,(SP)←0FFC+2=0FFD,然后,(SP)+4=0FFD+4=1000,結(jié)果使SP跳過了堆棧數(shù)據(jù)而回到了原始位置。

本文引用地址:http://butianyuan.cn/article/201611/322187.htm

  5 中斷及中斷返回指令

 INT n中斷指令(interrupt),n為中斷類型號(hào)

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

 INTO 溢出則中斷(中斷類型為4)

  INTn 中斷指令(interrupt),n為中斷類型號(hào)
  執(zhí)行操作:① 入棧保存FLAGS:(SP) ← (SP)-2,((SP)) ← (FLAGS)
      ?、?入棧保存返回地址:(SP) ← (SP)-2,((SP)) ← (CS)
                  (SP) ← (SP)-2,((SP)) ← (IP)
      ?、?轉(zhuǎn)中斷處理程序:(IP) ← (n×4)
                 (CS) ← (n×4+2)

 IRET中斷返回指令(return from interrupt)
  執(zhí)行操作:① 返回地址出棧:(IP) ← ((SP)),(SP) ← (SP)+2
                (CS) ← ((SP)),(SP) ← (SP)+2
      ?、?FLAGS出棧:(FLAGS) ← ((SP)),(SP) ← (SP)+2

  INTO溢出則中斷(中斷類型為4)
  執(zhí)行操作:若OF=1(有溢出),則:
      ?、?入棧保存FLAGS:(SP) ← (SP)-2,((SP)) ← (FLAGS)
      ?、?入棧保存返回地址:(SP) ← (SP)-2,((SP)) ← (CS)
                  (SP) ← (SP)-2,((SP)) ← (IP)
      ?、?轉(zhuǎn)中斷處理程序:(IP) ← (4×4)= (10H)
                 (CS) ← (4×4+2)= (12H)

  中斷指令用于調(diào)用中斷例行程序(又稱中斷服務(wù)程序),這是一種遠(yuǎn)調(diào)用。完成各種功能的中斷例行程序都有一個(gè)編號(hào),稱為中斷類型號(hào)。各種中斷例行程序的入口地址按中斷類型號(hào)的順序存儲(chǔ)在一個(gè)表中,這個(gè)表稱為中斷向量表。每個(gè)中斷例行程序的入口地址占用4個(gè)字節(jié),因此,它在中斷向量表中的地址可用中斷類型號(hào)乘4來求得。執(zhí)行中斷指令時(shí),首先要入棧保存調(diào)用程序執(zhí)行的現(xiàn)場,即當(dāng)時(shí)的標(biāo)志寄存器的值和斷點(diǎn)的地址,然后,根據(jù)中斷類型號(hào)(n×4)到中斷向量表中取得中斷例行程序的入口地址,分別送給IP和CS,以實(shí)現(xiàn)調(diào)用中斷例行程序的功能。

  中斷返回指令I(lǐng)RET的操作和INT指令相反,即從堆棧中取出返回地址和標(biāo)志位,然后返回到被中斷的程序。
INTO指令隱含的中斷類型號(hào)為4,因此保存斷點(diǎn)地址和標(biāo)志位后,從中斷向量表的10H和12H兩個(gè)字中取出中斷例行程序的入口地址,從而轉(zhuǎn)去運(yùn)行中斷例行程序。

  INT指令(包括INTO)執(zhí)行后,把IF和TF置0,但不影響其它標(biāo)志位。

 6 處理機(jī)控制指令

  處理機(jī)控制指令包括一組置0或置1標(biāo)志位的指令,還有一些控制處理機(jī)狀態(tài)的指令。

 6.1 標(biāo)志位處理指令

  這一組指令分別對(duì)標(biāo)志位CF、DF、IF執(zhí)行置0、置1或求反的操作,如,CLD指令執(zhí)行的操作是:DF←0;STD執(zhí)行的操作是:DF←1。

  標(biāo)志位處理指令只影響本指令指定的標(biāo)志,而不影響其它標(biāo)志位。

   ?、?標(biāo)志位處理指令    ?、?處理機(jī)控制指令
      CLC CF置0          NOP 無操作
      STC CF置1          HLT 停機(jī)
      CMC CF求反          WAIT 等待
      CLD DF置0          ESC 轉(zhuǎn)義
      STD DF置1          LOCK 封鎖
      CLI IF置0
      STI IF置1

 6.2 處理機(jī)控制指令

  NOP 無操作指令(no operation)

  HLT 停機(jī)指令(halt)

  WAIT 等待指令(wait)

  ESC mem 轉(zhuǎn)義指令(escape)

  LOCK前綴封鎖(lock)

  NOP 無操作指令(no operation)
  執(zhí)行操作:不執(zhí)行任何操作,其機(jī)器碼占用1個(gè)字節(jié)單元,執(zhí)行時(shí)間為3個(gè)時(shí)鐘周期,因此,該指令的作用表現(xiàn)在時(shí)間和空間上。時(shí)間上它可使上下兩條指令的執(zhí)行有一點(diǎn)間隔,這使某些指令的執(zhí)行,特別是控制硬件接口的指令因?yàn)橛幸稽c(diǎn)延時(shí)而增加可靠性。空間上它的位置可在調(diào)試指令時(shí)用其它指令來代替。

  HLT 停機(jī)指令(halt)
  執(zhí)行操作:使處理機(jī)停止軟件的執(zhí)行并等待一次外部中斷的到來,中斷結(jié)束后處理機(jī)繼續(xù)執(zhí)行下面的程序。使用該指令的目的通常是為了保持外部硬件中斷與軟件系統(tǒng)的同步。

  WAIT 等待指令(wait)
  執(zhí)行操作:測試微處理器的BUSY/TEST管腳,如果執(zhí)行WAIT指令時(shí),BUSY/TEST=1(指示不忙),則繼續(xù)執(zhí)行下一條指令。如果執(zhí)行WAIT指令時(shí),BUSY/TEST=0(指示忙),則微處理器等待直到BUSY/TEST管腳變?yōu)?。
  
  ESC mem 轉(zhuǎn)義指令(escape)
  執(zhí)行操作:mem指定存儲(chǔ)單元,執(zhí)行ESC指令時(shí),從存儲(chǔ)器取得指令或操作數(shù)通過總線送給8087~80387數(shù)值協(xié)處理器。協(xié)處理器能處理算術(shù)運(yùn)算、函數(shù)運(yùn)算、對(duì)數(shù)運(yùn)算等數(shù)值運(yùn)算,其運(yùn)算速度比使用常規(guī)指令寫的軟件快的多。

  LOCK前綴 封鎖(lock)
  執(zhí)行操作:指令前加LOCK,使得在鎖定指令期間保持鎖存信號(hào)LOCK=0,以禁止外部總線上的主控制器或系統(tǒng)其它部件。例如,LOCK MOV AL,[SI]執(zhí)行時(shí),總線封鎖直至MOV指令執(zhí)行完畢。

  【小結(jié)】

   1、8086尋址方式

  尋址方式
    操作數(shù)地址(PA)
   指令格式舉例
  立即尋址
操作數(shù)在指令中給出
MOV DX,100H ; (DX)←100H
  寄存器尋址
操作數(shù)在寄存器中
ADD AX,BX ; (AX)←(AX)+(BX)
  直接尋址
操作數(shù)的有效地址由指令直接給出
MOV AX,[100] ; (AX)←(100)
MOV AX,VAR ; (AX)←(VAR)
  寄存器
  間接尋址
PA=(DS)×16+(BX)或(SI)或(DI)
PA=(SS) ×16+(BP)
MOV AX,[BX] ;
(AX)←((DS)×16+(BX))
  寄存器
  相對(duì)尋址
PA=(DS)×16+(BX)或(SI)或(DI)+位移量
PA=(SS) ×16+(BP)+位移量
MOV AL,MESS[SI];
(AL)←((DS)×16+(SI)+OFFSET MESS)
  基址變址
  尋址
PA=(DS)×16+(BX)+(SI)或(DI)
PA=(SS) ×16+(BP) +(SI)或(DI)
MOV AX,[BX+DI];
(AX)←((DS)×16+(BX)+(DI))
  相對(duì)基址
  變址尋址
PA=(DS)×16+(BX)+(SI)或(DI)+位移量
PA=(SS) ×16+(BP) +(SI)或(DI)+位移量
MOV AX,BUFF(BX+DI);
(AX)←((DS)×16+(BX)+(DI)+OFFSET BUFF)

  2、8086指令系統(tǒng)
   學(xué)習(xí)一條指令時(shí),要注意以下幾個(gè)方面:
  ?。?) 指令功能--該指令能實(shí)現(xiàn)何種操作,通常指令助記符就是指令功能的英文縮寫詞。
  ?。?) 指令支持的尋址方式--指令中的源操作數(shù)和目的操作數(shù)字段允許采用的尋址方式。
  ?。?) 指令對(duì)標(biāo)志位的影響--該指令執(zhí)行后對(duì)各個(gè)標(biāo)志位的影響。
  ?。?) 指令的特殊要求--該指令隱含使用或限定使用的寄存器以及需要預(yù)置的參數(shù)。

上一頁 1 2 下一頁

關(guān)鍵詞: 8086指令系統(tǒng)控制轉(zhuǎn)移指

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉