新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 8086指令系統---控制轉移指令(二)

        8086指令系統---控制轉移指令(二)

        作者: 時間:2016-11-27 來源:網絡 收藏


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

        本文引用地址:http://www.104case.com/article/201611/322187.htm

          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指令執行完畢。

          【小結】

           1、8086尋址方式

          尋址方式
            操作數地址(PA)
           指令格式舉例
          立即尋址
        操作數在指令中給出
        MOV DX,100H ; (DX)←100H
          寄存器尋址
        操作數在寄存器中
        ADD AX,BX ; (AX)←(AX)+(BX)
          直接尋址
        操作數的有效地址由指令直接給出
        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))
          寄存器
          相對尋址
        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))
          相對基址
          變址尋址
        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指令系統
           學習一條指令時,要注意以下幾個方面:
           (1) 指令功能--該指令能實現何種操作,通常指令助記符就是指令功能的英文縮寫詞。
           (2) 指令支持的尋址方式--指令中的源操作數和目的操作數字段允許采用的尋址方式。
           (3) 指令對標志位的影響--該指令執行后對各個標志位的影響。
           (4) 指令的特殊要求--該指令隱含使用或限定使用的寄存器以及需要預置的參數。

        上一頁 1 2 下一頁

        關鍵詞: 8086指令系統控制轉移指

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 高碑店市| 桐庐县| 德州市| 巴马| 上思县| 天长市| 大庆市| 宝鸡市| 日照市| 昭觉县| 金乡县| 辰溪县| 名山县| 阜新| 汽车| 积石山| 万荣县| 兰考县| 汪清县| 金湖县| 晋中市| 河北省| 渝北区| 临沧市| 色达县| 兰溪市| 宾川县| 林州市| 吉隆县| 石城县| 莎车县| 白城市| 芦山县| 澎湖县| 鲁山县| 新龙县| 巨鹿县| 调兵山市| 余干县| 章丘市| 聊城市|