新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 8086尋址方式

        8086尋址方式

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


          這種尋址方式也為堆棧處理提供了方便。
          一般(BP)可指向棧頂,從棧頂到數組的首址可用位移量表示,變址寄存器可用來訪問數組中的某個元素。

          綜上所述,有效地址可以由以下三種成分組成:
          · 位移量(Displacement)是存放在指令中的一個8位或16位數,但它不是立即數,而是一個地址。
          · 基址(Base)是存放在基址寄存器(BX或BP)中的內容。它是有效地址中的基址部分,通常用來指向數據段中數組或字符串的首地址。
          · 變址(Index)是存放在變址寄存器(SI或DI)中的內容。它通常用來訪問數組中的某個元素或字符串中的某個字符。

          有效地址的計算可用下式表示:
          EA = 基址 + 變址 + 位移量

          這三種成分都可正可負,以保證指針移動的靈活性。它們任意組合使用,可得到不同的尋址方式。

        例 MOV AX, MASK[BX][SI]
              (或 MOV AX, MASK[BX+SI],或 MOV AX, [MASK+BX+SI])
              如(DS)= 3000H,(BX)= 2000H,(SI)= 1000H,MASK = 0250H,
              則物理地址 = 30000H + 2000H + 1000H + 0250H = 33250H
              指令執行情況如圖3.6所示,最后的執行結果是(AX)= 1234H。

        與轉移地址有關的尋址方式

          前面的與數據有關的尋址方式最終確定的是一個數據的地址,而這里的與轉移地址有關的尋址方式最終確定一條指令的地址。順序執行的指令地址是由指令指針寄存器IP自動增量形成的,而程序轉移的地址必須由轉移類指令和CALL指令指出,這類指令表示轉向地址的尋址方式包括:段內直接尋址、段內間接尋址、段間直接尋址、段間間接尋址。

         三個表示轉移距離(稱為位移量)的操作符:SHORT、NEA*、**R。

          SHORT表示位移量在-128~127字節之間。

          NEA*表示在同一段內轉移,位移量在-32768~32767字節范圍內。

          **R表示轉移距離超過±32K字節,或是在不同段之間轉移。
          因為CS:IP寄存器總是指向下一條將要執行的指令的首地址(稱為IP當前值),當轉移指令執行后,必須修改IP或CS、IP的值。當轉移指令給出位移量時,用IP當前值加上位移量即為新的IP的值。
         
          SHORT轉移,稱為短轉移,位移量用一個字節(8位)來表示。

          NEAR轉移,稱為近轉移,位移量用16位表示,因為程序控制仍然在當前代碼段,所以只修改IP的值,CS的值不變。

          FAR轉移,稱為遠轉移,因為程序控制超出了當前代碼段,所以CS和IP都必須修改為新的值。

          與轉移地址有關的4種尋址方式就是告訴CPU如何修改CS和IP的值,以達到控制程序轉移的目的。

        1 段內直接尋址(Intrasegment direct addressing)

          這種尋址方式在指令中直接指出轉向地址,如:

            JMP SHORT NEXT
            JMP NEAR PTR AGAIN

          其中,NEXT和AGAIN均為轉向的符號地址。在機器指令中,操作碼之后給出的是相對于當前IP值的位移量(轉移距離),所以,轉向的有效地址是當前IP值與指令中給出的位移量(8位或16位)之和。  

          注意:這種尋址方式適用于條件轉移及無條件轉移指令,當用于條件轉移指令時,位移量只允許8位。

         例 段內直接尋址方式

                    1060:000D EB04 JMP SHORT NEXT
              IP當前值→ 1060:000F … …
                    1060:0011 … …
                    1060:0013 0207 NEXT: ADD AL,[BX]

          CPU在執行JMP指令時,IP指向了下一條指令,其值為000F,JMP SHORT NEXT指令的機器語言為EB04,EB為操作碼,04為位移量,所以轉向的有效地址應為:
                    000F + 0004 = 0013

          0013正是標號NEXT的地址。JMP指令執行后,將IP寄存器修改為0013,代碼段寄存器CS不變。緊接著CPU根據CS:IP的指示,取出1060:0013中的ADD指令開始執行,這樣實現了程序的轉移。

        2 段內間接尋址(Intrasegment indirect addressing)

          這種尋址方式在指令中用數據尋址方式(除立即尋址方式外)間接地指出轉向地址,如:

            JMP BX
            JMP NEAR PTR [BX]
            JMP TABLE[SI]

          根據指令中的尋址方式,確定一個寄存器或一個存儲單元,其內容就是指定轉向的有效地址。因為程序的轉移仍在同一段內進行,所以只需將IP修改成新的轉向地址,CS不變。段內轉移指令中的NEAR PTR是可以缺省的。

          注意:這種尋址方式以及以下的兩種段間尋址方式都不能用于條件轉移指令。

          條件轉移指令只能使用段內直接尋址的8位位移量,而JMP和CALL指令則可用四種尋址方式中的任何一種。

          假設: (DS)= 2000H,(BX)= 1256H,(SI)= 528FH,
              位移量 = 20A1H,(232F7H)= 3280H,(264E5H)= 2450H。

          例 JMP BX
                則執行該指令后(IP)= 1256H

          例 JMP [BX][SI]
                則指令執行后(IP)=(16d ×(DS)+(BX)+(SI))
                         =(20000H + 1256H + 528FH)
                         =(264E5H)
                         = 2450H

        3 段間直接尋址(Intersegment direct addressing)

          段間直接尋址和段內直接尋址類似,指令中直接給出轉向地址,不同的是,在符號地址之前要加上表示段間遠轉移的 操作符FAR PTR。

          指令格式如下:
             JMP FAR PTR OUTSEG

           因為是段間轉移,CS和IP都要更新,這個新的段地址和偏移地址由指令操作碼之后的連續兩個字提供,所以只要將指令中提供的轉向偏移地址裝入IP,轉向段地址裝入CS,就完成了從一個段到另一個段轉移的工作。

        4 段間間接尋址(Intersegment indirect addressing)

          這種尋址方式仍然是用相繼兩個字的內容裝入IP和CS來達到段間的轉移目的的,但這兩個字的存儲器地址是通過指令中的數據尋址方式(除立即尋址方式和寄存器尋址方式外)來取得的。

          為了說明尋址兩個字單元,指令中必須加上雙字操作符DWORD。指令格式如下:
            JMP DWORD PTR [SI]
            JMP DWORD PTR[TABLE+BX]

        上一頁 1 2 下一頁

        關鍵詞: 8086尋址方

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 马尔康县| 句容市| 乌拉特中旗| 大新县| 焦作市| 浑源县| 舞阳县| 云龙县| 当雄县| 启东市| 德保县| 大邑县| 金川县| 广西| 格尔木市| 大庆市| 安平县| 图木舒克市| 金溪县| 武隆县| 云霄县| 平乡县| 林周县| 伊川县| 道真| 仙桃市| 松江区| 台北县| 鹤壁市| 轮台县| 鄱阳县| 咸阳市| 冀州市| 邹城市| 二手房| 沈阳市| 瑞昌市| 申扎县| 乌鲁木齐市| 宿松县| 东兰县|