<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          8086尋址方式

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


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

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

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

            這三種成分都可正可負(fù),以保證指針移動(dòng)的靈活性。它們?nèi)我饨M合使用,可得到不同的尋址方式。

          例 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
                指令執(zhí)行情況如圖3.6所示,最后的執(zhí)行結(jié)果是(AX)= 1234H。

          與轉(zhuǎn)移地址有關(guān)的尋址方式

            前面的與數(shù)據(jù)有關(guān)的尋址方式最終確定的是一個(gè)數(shù)據(jù)的地址,而這里的與轉(zhuǎn)移地址有關(guān)的尋址方式最終確定一條指令的地址。順序執(zhí)行的指令地址是由指令指針寄存器IP自動(dòng)增量形成的,而程序轉(zhuǎn)移的地址必須由轉(zhuǎn)移類指令和CALL指令指出,這類指令表示轉(zhuǎn)向地址的尋址方式包括:段內(nèi)直接尋址、段內(nèi)間接尋址、段間直接尋址、段間間接尋址。

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

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

            NEA*表示在同一段內(nèi)轉(zhuǎn)移,位移量在-32768~32767字節(jié)范圍內(nèi)。

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

            NEAR轉(zhuǎn)移,稱為近轉(zhuǎn)移,位移量用16位表示,因?yàn)槌绦蚩刂迫匀辉诋?dāng)前代碼段,所以只修改IP的值,CS的值不變。

            FAR轉(zhuǎn)移,稱為遠(yuǎn)轉(zhuǎn)移,因?yàn)槌绦蚩刂瞥隽水?dāng)前代碼段,所以CS和IP都必須修改為新的值。

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

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

            這種尋址方式在指令中直接指出轉(zhuǎn)向地址,如:

              JMP SHORT NEXT
              JMP NEAR PTR AGAIN

            其中,NEXT和AGAIN均為轉(zhuǎn)向的符號地址。在機(jī)器指令中,操作碼之后給出的是相對于當(dāng)前IP值的位移量(轉(zhuǎn)移距離),所以,轉(zhuǎn)向的有效地址是當(dāng)前IP值與指令中給出的位移量(8位或16位)之和?! ?br />
            注意:這種尋址方式適用于條件轉(zhuǎn)移及無條件轉(zhuǎn)移指令,當(dāng)用于條件轉(zhuǎn)移指令時(shí),位移量只允許8位。

           例 段內(nèi)直接尋址方式

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

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

            0013正是標(biāo)號NEXT的地址。JMP指令執(zhí)行后,將IP寄存器修改為0013,代碼段寄存器CS不變。緊接著CPU根據(jù)CS:IP的指示,取出1060:0013中的ADD指令開始執(zhí)行,這樣實(shí)現(xiàn)了程序的轉(zhuǎn)移。

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

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

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

            根據(jù)指令中的尋址方式,確定一個(gè)寄存器或一個(gè)存儲(chǔ)單元,其內(nèi)容就是指定轉(zhuǎn)向的有效地址。因?yàn)槌绦虻霓D(zhuǎn)移仍在同一段內(nèi)進(jìn)行,所以只需將IP修改成新的轉(zhuǎn)向地址,CS不變。段內(nèi)轉(zhuǎn)移指令中的NEAR PTR是可以缺省的。

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

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

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

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

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

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

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

            指令格式如下:
               JMP FAR PTR OUTSEG

             因?yàn)槭嵌伍g轉(zhuǎn)移,CS和IP都要更新,這個(gè)新的段地址和偏移地址由指令操作碼之后的連續(xù)兩個(gè)字提供,所以只要將指令中提供的轉(zhuǎn)向偏移地址裝入IP,轉(zhuǎn)向段地址裝入CS,就完成了從一個(gè)段到另一個(gè)段轉(zhuǎn)移的工作。

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

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

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

          上一頁 1 2 下一頁

          關(guān)鍵詞: 8086尋址方

          評論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();