新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 8086指令系統---數據傳送指令

        8086指令系統---數據傳送指令

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


          注意:
           ● 只限于在AL或AX與I/O端口之間傳送信息
           ● 不影響標志位

          XLAT   ; 換碼指令(translate)
          執行操作: (AL) ← ((DS)×16+(BX)+(AL))
          這條指令根據AL寄存器提供的位移量,將BX指示的字節表格中的代碼換存在AL中。該指令還可寫為:XLAT opr,opr為字節表格的首地址,因為opr所表示的偏移地址已存入BX寄存器,所以opr在換碼指令中可有可無,有則可提高程序的可讀性。

          注意:
           ● 所建字節表格的長度不能超過256字節,因為存放位移量的是8位寄存器AL;
           ● XLAT指令不影響標志位。

         例 IN   AL, 61H   ; (AL) ← 端口61H的內容
                 MOV   DX, 278H   ; (DX) ← 端口地址278H
                  IN   AL, DX    ; (AL) ← 端口278H的內容

          例 OUT   61H, AL   ; 61H端口 ← (AL)
                 MOV   DX, 279H   ; (DX) ← 端口地址279H
                 OUT   DX, AX    ; 279H端口 ← (AX)

         3 地址傳送指令

          這組指令完成把地址送到指定寄存器的功能。

          LEA reg, src ; 有效地址送寄存器(load effective address)
          執行操作:(reg) ← offset of src
          LEA指令把源操作數的有效地址送到指定的寄存器,這個有效地址是由src選定的一種存儲器尋址方式確定的。

          LDS reg, src ; 指針送寄存器和DS(load DS with point)
          執行操作: (reg) ← (src)
               (DS) ← (src+2)

          LES reg, src ; 指針送寄存器和ES(load ES with point)
          執行操作: (reg) ← (src)
               (ES) ← (src+2)

          LDS和LES指令把確定內存單元位置的偏移地址送寄存器,段地址送DS或ES。這個偏移地址和段地址(也稱地址指針)是由src指定的兩個相繼字單元提供的。

          注意:
          ● 指令中的reg不能是段寄存器;
          ● 指令中的src必須使用存儲器尋址方式;
          ● 該指令不影響標志位。

        例假設某數據段定義如下:
          0000        DATA SEGMENT
          0000 0040      TABLE   DW  0040H
          0002 3000           DW  3000H
          0004        DATA ENDS

          請指出下列指令的執行結果,并說明它們之間的區別。
          ① MOV BX, TABLE
          ② LEA BX, TABLE
          ③ MOV BX, OFFSET TABLE

          答:第①條指令執行后,(BX)=0040H,
            第②條指令執行后,(BX)=0000,
            第③條指令執行后,(BX)=0000。

         比較①②兩條指令,第①條MOV指令是用直接尋址方式把變量TABLE的內容送入BX,而LEA指令是把TABLE的地址送入BX。

          比較②③兩條指令可以看到,LEA和用OFFSET指示符實現的功能是相同的,都是將TABLE的偏移地址0000送BX。既然功能相同,它們之間還有什么區別呢?

          首先,LEA指令可以使用各種存儲器尋址方式,如,LEA BX,[DI],LEA BX,TABLE[DI],LEA SI,[BX+DI]等,這些指令都是把計算出來的有效地址送目的寄存器,而OFFSET不能使用這些尋址方式,它只作用于像TABLE這樣的簡單變量(或標號)。

          其次,對簡單變量,OFFSET指示符比LEA執行速度快,因為MOV BX, OFFSET TABLE指令在匯編時,由匯編程序計算出了TABLE的偏移地址,并被匯編成立即數傳送指令,因此效率很高,而LEA指令是在執行時才計算地址,然后再傳送到指定寄存器,因此執行速度相對慢一些。

          例 對例3.17的數據定義,下列兩條指令的執行結果是什么?
              ① LDS BX, TABLE
              ② LES BX, TABLE

          答:LDS指令執行后,(BX)=0040H, (DS)=3000H
            LES指令執行后,(BX)=0040H, (ES)=3000H

         4 標志寄存器傳送指令

         這組指令完成和標志位有關的操作。

         LAHF 標志寄存器的低字節送AH(load AH with flags) 

         SAHF AH送標志寄存器低字節(store AH into flags)
         
         PUSHF 標志進棧(push the flags)
         
         POPF 標志出棧(pop the flags)
         

        注意:
           ● LAHF和SAHF指令隱含的操作寄存器是AH和FLAGS
           ● LAHF和PUSH不影響標志位,SAHF和POPF則由裝入的值來確定標志位的值。

        LAHF 標志寄存器的低字節送AH(load AH with flags)
          執行操作:
          (AH) ← (FLAGS)0-7

        SAHF AH送標志寄存器低字節(store AH into flags)
          執行操作:
          (FLAGS) 0-7 ← (AH)

        PUSHF 標志進棧(push the flags)
          執行操作:
          (SP) ← (SP)-2
          ((SP)+1,(SP)) ← (FLAGS)0-15
          
        POPF 標志出棧(pop the flags)
          執行操作:
          (FLAGS) 0-15 ← ((SP)+1,(SP))
          (SP) ← (SP)+2

        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 苏州市| 青铜峡市| 囊谦县| 夏邑县| 慈溪市| 长治县| 新兴县| 于田县| 临沭县| 汉川市| 那坡县| 赤水市| 新绛县| 九江县| 莱州市| 兴城市| 和顺县| 平山县| 黄龙县| 吴川市| 新化县| 灌南县| 兴和县| 深水埗区| 普格县| 栖霞市| 三河市| 神农架林区| 普宁市| 沙河市| 崇阳县| 林周县| 无为县| 昭平县| 绥阳县| 芮城县| 东台市| 铜陵市| 赤壁市| 阳山县| 咸阳市|