新聞中心

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

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

        作者: 時間:2016-11-27 來源:網絡 收藏
          8086指令系統分為以下6組:
          ⒈ 數據傳送指令
          ⒉ 算術指令
          ⒊ 邏輯指令
          ⒋ 串處理指令
          ⒌ 控制轉移指令
          ⒍ 處理機控制指令

        數據傳送指令

          數據傳送指令的功能是把數據、地址傳送到寄存器或存儲器單元中。它分為4類。

          ⑴ 通用數據傳送指令     ⑵ 累加器專用傳送指令
           MOV  傳送           IN   輸入
           PUSH 進棧           OUT  輸出
           POP  出棧           XLAT 換碼
           XCHG 交換

          ⑶ 地址傳送指令       ⑷ 標志寄存器傳送指令
           LEA  有效地址送寄存器     LAHF 標志送AH
           LDS  指針送寄存器和DS     SAHF AH送標志寄存器
           LES  指針送寄存器和ES     PUSHF 標志進棧
                           POPF 標志出棧

        1 通用數據傳送指令 

          MOV dst, src;傳送指令(move)
          執行操作:(dst) ← (src)
          功能: 將源操作數(字節或字)傳送到目的地址。

          注意:
           ● 目的操作數dst和源操作數src不能同時用存儲器尋址方式,這個限制適用于所有指令;
           ● 目的操作數dst不能是CS,也不能用立即數方式;
           ● 目的操作數dst和源操作數src不允許同時為段寄存器;
           ● MOV指令不影響標志位。

          PUSH   src ; 進棧指令(push onto the stack)
          執行操作: (SP) ← (SP)-2
                ((SP)) ← (src)

          POP    dst ; 出棧指令(pop from the stack)
          執行操作: (dst) ← ((SP))
                (SP) ← (SP)+2

          PUSH和POP指令分別將數據存入堆棧或把堆棧中的數據取出。堆棧是以LIFO(后進先出)方式工作的一個存儲區,程序中定義的堆棧段就是這樣一個LIFO存儲區。數據存入堆棧單元或從堆棧單元中取出都由堆棧指針SP指示,而SP總是指向棧頂,所以進棧和出棧指令都會自動修改SP。

          PUSH指令執行時,SP的內容先減2,然后將數據壓入SP所指示的字單元,存儲的方法同樣是高8位存入高地址字節,低8位存入低地址字節。POP指令執行時,將SP所指示的棧頂地址的內容取出放入目的地址,然后SP增2,指向新的棧頂地址。

          注意:
           ● PUSH和POP指令只能是字操作,因此存取字數據后,SP的修改必須是+2或-2;
           ● PUSH和POP指令不能使用立即數方式;
           ● POP指令的dst不允許是CS寄存器;
           ● PUSH和POP指令都不影響標志位。
           PUSH指令在程序中常用來暫存某些數據,而POP指令又可將這些數據恢復。

          XCHG  opr1, opr2 ; 交換指令(exchange)
          執行操作:(opr1) ←→ (opr2)
          XCHG指令使兩個操作數opr1,和opr2互相交換,其中一個操作數必須在寄存器中,另一個操作數可以在寄存器或存儲器中。

          注意:
           ● 不允許使用段寄存器
           ● 不影響標志位

          例 假設(DS)=1000H, (SS)=4000H, (SP)=100H, (BX)=2100H, (12100)=00A8H, 指出連續執行下列各條指令后,有關寄存器、存儲單元以及堆棧的情況。

             PUSH   DS
             PUSH   BX
             PUSH   [BX]
             POP    DI
             POP    WORD PTR [DI+2]
             POP    DS

          
        執行結果: (SP)=100H-2=0FEH    (SP)=0FE-2=0FCH   (SP)=0FC-2=0FAH
              (400FEH)=1000H      (400FCH)=2100H    (400FAH)=00A8H

          
        執行結果: (SP)=0FA+2=0FCH    (SP)=0FC+2=0FEH     (SP)=0FE+2=100H
              (DI)=00A8H       (100AAH)=2100H      (DS)=1000H

          例 已知(AX)=6634H, (BX)=0F24H, (SI)=0012H, (DS)=1200H, (12F36H)=2500H, 寫出下列指令執行的結果。

              XCHG  AH,AL    ; 執行前: (AH)=66H, (AL)=34H
                       ; 執行后: (AH)=34H, (AL)=66H
              XCHG  AX,[BX+SI] ; 執行前: (AX)=6634H, (12F36H)=2500H
                       ; 執行后: (AX)=2500H, (12F36H)=6634HH

         2 累加器專用傳送指令

          這組指令只限于使用累加器(ac:AX 或AL)傳送信息。
          IN  ac, port ; 輸入指令(input), port≤0FFH
          執行操作: (AL) ← (port) 傳送字節
           或 (AX) ← (port+1,port) 傳送字

          IN  ac, DX  ; 輸入指令, DX中的port>0FFH
          執行操作: (AL) ← ((DX)) 傳送字節
           或 (AX) ← ((DX)+1,(DX)) 傳送字

          OUT  port, ac  ; 輸出指令(output), port≤0FFH
          執行操作: (port) ← (AL) 傳送字節
           或 (port+1,port) ← (AX) 傳送字

          OUT  DX, ac   ; 輸出指令(output), DX中的 port>0FFH
          執行操作: ((DX)) ← (AL) 傳送字節
           或 ((DX)+1,(DX)) ← (AX) 傳送字

          對8086及其后繼機型的微處理機,所有I/O端口與CPU之間的通信都由輸入輸出指令IN和OUT來完成。IN指令將信息從I/O輸入到CPU,OUT指令將信息從CPU輸出到I/O端口,因此,IN和OUT指令都要指出I/O端口地址。微處理機分配給外部設備最多有64K個端口,其中前256個端口(0~FFH)稱為固定端口,可以直接在指令中指定。當端口地址超過8位(≥256),稱為可變端口,它必須先送到DX寄存器,然后再用IN或OUT指令傳送信息。CPU與I/O端口傳送信息的寄存器只限于累加器ac (AX或AL),傳送16位信息用AX,傳送8位信息用AL,這取決于外設端口的寬度。

        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 麦盖提县| 美姑县| 绥化市| 武功县| 武冈市| 特克斯县| 江陵县| 子洲县| 邯郸县| 田阳县| 湄潭县| 收藏| 唐海县| 翼城县| 连山| 清涧县| 韶山市| 招远市| 乌拉特后旗| 莒南县| 鱼台县| 龙岩市| 武邑县| 甘洛县| 松溪县| 高陵县| 江口县| 安庆市| 定结县| 介休市| 金阳县| 湟源县| 盘山县| 崇仁县| 内丘县| 沈阳市| 任丘市| 甘南县| 抚远县| 绍兴市| 安溪县|