《微機原理與接口技術》重要總結(附思維導圖)

首先,奉上思維導圖。教材爲《微機原理與接口技術》(第2版)李珍香主編 清華大學出版社。一萬多字的總結。某些部分需要配合課本。

目錄

微型計算機基礎

8086微處理器

尋址方式

指令系統


微機原理與接口技術

  • 微型計算機基礎

    • 微型計算機概述
      計算機系統是一種由硬件系統和軟件系統組成的複雜電子裝置。它能夠存儲程序、存儲原始數據、中間結果和最終運算結果,並自動完成運算,是一種能對各種數字化信息進行處理的信息處理機
      計算機按照性能、價格和體積等綜合指標,可分爲巨型計算機、大型計算機、小型計算機、微型計算機。​​
      • 微型計算機的發展
        微型計算機是指以微處理器爲核心,並配有以大規模集成電路構成的內存儲器、輸入/輸出接口電路、輸入/輸出設備及系統總線所構成的裸機。微型計算機的產生和發展都以微處理器爲標誌。
        微處理器就是計算機中的中央處理器(CPU1971年世界上第一塊微處理器4004誕生,至今,微處理器的發展已經歷6代。
      • 微型計算機的特點
        微型計算機具有一般計算機的運算速度快 、計算精度高、記憶功能和邏輯判斷力強、可自動連續工作等基本特點。
        自身特點:1、功能強、可靠性高
        2、價格低廉
        3、系統設計靈活,適應性強
        4、體積小,重量輕,維護方便​​​​
    • 微型計算機系統的組成
      • 微型計算機系統的概念
        微型計算機系統是以微型計算機爲主體,按不同應用要求,配以相應的外部設備、輔助電路以及指揮微型計算機工作的系統軟件所構成的系統。
        微型計算機系統由硬件和軟件兩大部分組成。硬件主要包括主機和外部設備。軟件分爲系統軟件和應用軟件。系統軟件中最主要的是操作系統。操作系統是微機系統必備的系統軟件,其主要作用是管理微機的硬、軟件資源,提供人機接口,爲用戶創造方便、有效和可靠的微機工作環境。
      • 微型計算機系統的硬件結構及其功能
        微型計算機的硬件主要由微處理器、內存儲器、I/O接口電路及系統總線組成
        • 1. 微處理器(CPU
          微處理器是微型計算機的核心部件,是整個系統的運算和指揮控制中心負責統一協調、管理和控制系統中各個部門有機地工作。CPU的組成主要由運算器、控制器、寄存器組
        • 2. 存儲器
          存儲器用來存放數據和程序,是計算機各種信息的存儲和交流中心。按照存儲器在計算機中的作用,可分爲內存儲器、外存儲器和高速緩衝存儲器。
          內存儲器是一個記憶裝置,也稱爲主存儲器。是CPU可以直接訪問的存儲器,主要用來存儲微機工作過程中需要操作的數據、程序,運算的中間結果和最後結果。內存儲器的主要工作是讀/寫操作。
          外存儲器也稱輔助存儲器,用於存放暫時不用的程序和數據,不能直接與CPU交換數據,需要通過接口電路來實現。常用的外存儲器有硬盤、U盤。​​
        • 3. I/O接口電路
          I/O接口電路的功能是完成主機與外部設備之間信息交換。
        • 4. 總線
          微型計算機系統採用總線結構將CPU、存儲器和外部設備進行鏈接。微機中的總線是由一組導線和相關控制程序電路組成,是各種公共信號線的集合,用於微機系統各部件之間的信息傳遞。根據總線傳送的內容的不同,微機中的總線可分爲數據總線、地址總線、控制總線。
          • 數據總線(DB
            數據總線是一組雙向、三態總線,主要用來實現在CPU與內存儲器或I/O接口之間傳送數據。數據總線的條數決定了傳送數據的位數。
          • 地址總線(AB
            地址總線是一組單向、三態總線,是由CPU輸出,用來指定其要訪問的存儲單元或I/O接口的地址的。
          • 控制總線(CB
            控制總線是一組單向、三態總線,用於傳送控制信號、時序信號和狀態信息,實現CPU的工作與外部電路的工作同步。
        • 5. I/O設備
          I/O設備即輸入/輸出設備,又稱爲外部設備或外圍設備,簡稱外設,是用戶與微機進行通信聯繫的主要裝置,
          ​​其中輸入設備是把程序、數據、命令轉換成微機所能識別接收的信息,然後輸入給微機。
          輸出設備是把CPU計算和處理的結果轉換成人們易於理解和閱讀的形式,然後輸出到外部。
      • 微型計算機的基本工作原理和工作過程
        計算機採用程序存儲控制的原理工作,此原理是馮諾依曼於1946年提出,它構成了計算機系統的結構框架。
        計算機工作有兩個基本能力:一是能存儲程序,二是能自動執行程序。因此,微機的工作過程就是:執行存儲在存儲器中的程序的過程。執行一條指令需要4個基本操作:(1)取指令;(2)分析指令;(3)執行指令;(4)爲執行下一條指令做好準備,即取出下一條指令。
      • 微型計算機的主要性能指標
        微型計算機的性能由它的系統結構、指令系統、硬件組成、外部設備及軟件配置等多方面因素綜合決定。最常用的性能指標有以下幾項:(1)字長;(2)存儲容量;(3)運算速度;(4)存取時間和存取週期;(5)可靠性和可維護性;(6)性能價格比。
    • 數制和編碼
      • 常用數制
        數制:是指用一組固定的符號和統一的規則來表示數值的方法,若在計數過程中採用進位的方法,則稱爲進位計數制。
        數位:指數碼在一個數中所處的位置。
        基數:指在某種進位計數制中,數位上所能使用的數碼個數,也指這個計數系統中採用的數字符號個數。
        位權:也稱權,是指在某種進位計數制中,不同位置上數碼的單位數值。​​​
      • 進制轉換
        二進制
        十進制
        十六進制​​​
      • 二進制數的運算
        算術運算:
        加:逢二進一
        減:借一當二
        乘除:與十進制相似​​
        邏輯運算:
        與:有一個爲0即爲0
        或:有一個爲1即爲1
        非:取反
        異或:​​​​​相同爲0,不同爲1
      • 帶符號數在計算機中的表示
        機器數:連同數的符號一起數字化了的數據稱爲機器數。例如:X= +91 = 01011011B Y = -91​ =11011011B
        真值:與機器數對應的用正、負符號加絕對值來表示的實際數值。例如:X= +91 = +1011011B Y = -91 = -​1011011B
        原碼:是一種簡單直觀的機器數表示方法。
        反碼:在原碼的基礎上,符號位不變,其餘按位求反。
        補碼:在反碼的基礎上,在末位加1​​​
  • 8086微處理器

    • 微處理器內部基本結構
      微處理器的基本功能如下:
      1能夠進行算術運算和邏輯運算;
      2能對指令進行譯碼、寄存並執行指令所規定的操作;
      3具有與存儲器和I/O接口進行數據通信的能力;
      4暫存少量數據;
      5能夠提供這個系統所需的定時和控制信號;
      6)能夠響應I/O設備發出的中斷請求。
      intel8086微處理器是典型的16位微處理器,在內部採用了並行流水線結構,可以提高CPU的利用率和處理速度。
      • 8086CPU功能結構
        從功能角度看,8086CPU的內部結構可分爲兩大部分,總線接口部件(BIU)和執行部件(EU)。這兩大部件通過內部總線連接,可以協同工作也可以獨立工作。
        • 總線接口部件(BIU
          BIUCPU與存儲器及I/O的接口,負責與存儲器和外設之間的信息傳送。
          BIU主要由以下幾部分組成:
          1​​20位地址加法器
          20位地址加法器用於將邏輯地址變換成存儲器所需的20位物理地址,即完成地址加法操作。
          2指令隊列緩衝器
          它是一個具有6個字節的先進先出”​RAM存儲器,用來按順序存放CPU要執行的指令代碼,並送入EU中去執行。
          3總線控制電路
          總線控制電路用於產生併發出總線控制信號,以實現對存儲器或I/O​端口的讀/寫控制。
        • 執行部件(EU
          EU負責指令的譯碼和執行。它不斷地從BIU的指令隊列中取出指令、分析指令並執行指令,在執行指令過程中所需要的數據和執行的結果,也都由EUBIU發出請求,再由BIU對存儲器或外設進行存取操作來完成。
          EU主要包括以下幾個部分:
          1​​算術邏輯單元ALU
          2暫存寄存器
          3標誌寄存器
          4通用寄存器
          5​EU控制器
      • 8086CPU的寄存器結構
        爲了提高CPU的運算速度,減少訪問存儲器的存取操作,8086CPU內置了相應寄存器,用來暫存參加運算的操作數及運算的中間結果。
        8086CPU內部提供有1416位的寄存器。
        • 通用寄存器
          • 數據寄存器
            這些寄存器可以用作存放算術、邏輯運算的源操作數,向ALU提供參與運算的原始數據,也可以用作存放目的操作室,保存運算的中間結果或最後結果。
            • AX
            • BX
            • CX
            • DX
          • 地址指針和變址寄存器
            這些寄存器主要用來存放或指示操作數的偏移地址。
            • 堆棧指針寄存器 SP
              存放的是當前堆棧段中棧頂的偏移地址。
            • 基數指針寄存器 BP
              存放的是堆棧中某一存儲單元的偏移地址。
            • 源變址寄存器 SI
              用來存放當前數據所在段的存儲單元的偏移地址,在串操作指令中SI規定用作存放源操作數的偏移地址。
            • 目的變址寄存器 DI
              SI一樣用來存放當前前數據所在段的存儲單元的偏移地址,此外,在串操作指令中,DI規定用作存放目的操作數的偏移地址。
        • 段寄存器
          存放各段的段地址
          • 代碼段 CS
          • 數據段 DS
          • 附加段 ES
          • 堆棧段 SS
        • 控制寄存器
          • 指令指針寄存器 IP
            用來存放代碼段中的偏移地址,在程序運行過程中,它始終指向下一條要執行的指令的地址。
          • 狀態標誌寄存器 Flags
            • 狀態標誌位
              • 進位標誌位 CF
              • 奇偶標誌位 PF
              • 輔助進位標誌位 AF
              • 零標誌位 ZF
              • 符號標誌位 SF
              • 溢出標誌位 OF
            • 控制標誌位
              • 中斷允許標誌位 IF
              • 方向標誌位 DF
              • 追蹤標誌位(單步標誌) TF
    • CPU的存儲器組織及I/O結構(詳情見P33P37
    • CPU的外部引腳及工作模式(詳情見P37P43
      8086CPU可以工作在最小和最大兩種工作模式下。
      最小模式,是指在系統中只有一個8086微處理器的情況,所有的總線控制信號都直接由8086CPU產生。
      最大模式,此模式下,總是包含兩個或兩個以上微處理器,其中一個主處理器就是8086,其他處理器稱爲協處理器,輔助主處理器工作。
      CPU工作在哪種模式下由硬件決定。當CPU處於不同工作模式時,部分引腳的功能是不同的。​​​
      1)引腳功能。引腳功能即引腳所起的作用,從引腳名稱上大致可以反映出來,
      2)引腳的流向。指引腳的方向是從芯片本身流向外部(輸出)還是從外部流入芯片(輸入),抑或是雙向的。
      3)有效方式。指引腳發揮作用時的特徵。總的來說,引腳有兩種有效方式,一種是點評有效(高電平和低電平),另一種是邊沿有效(上升沿有效和下降有效)
      4)三態能力。主要針對輸出方向的引腳,共有高電平、低電平和高阻三種狀態。​​​​
    • CPU的總線操作與時序
      微型計算機中的各個部件之間是通過總線來傳輸信息的,爲了保證使用總線的各個部件能有序地工作,必須使各部件按規定的時間順序工作,因此必須建立總線時序。微機CPU總線時序通常分爲三級,即時鐘週期,總線週期,指令週期。
      • 時鐘週期
        8086CPU的各種操作是在時鐘脈衝CLK的統一控制下協調同步進行的,時鐘脈衝是一個週期性的脈衝信號。一個時鐘脈衝的時間長度稱爲一個時鐘週期,是主頻的倒數。時鐘週期是CPU的基本時間計量單位,也是時序分析的刻度,8086的主頻爲5MHz,時鐘週期爲200ns
      • 總線週期
        總線週期是CPU通過總線對存儲器或I/O接口進行一次訪問所需要的時間。一個基本的總線週期由4個時鐘週期。
      • 指令週期
        CPU執行一條指令所需要的的時間(包括取指令的總線週期和執行指令所代表的具體操作所需要的時間)一個指令週期是由一個或者幾個總線週期組成的,不同指令的指令週期是不等長的,最短爲一個總線週期。
      • 總線操作與時序(詳情見P44P49
        8086CPU的操作可分爲內部操作與外部操作兩種。內部操作是CPU內部執行指令的過程。外部操作是CPU與其外部進行信息交換的過程,主要是指總線操作。
        8086CPU的總線操作主要有:系統復位和啓動操作、總線讀寫操作、總線保持或總線請求/允許操作、中斷響應操作。這些操作均是在時鐘信號的同步下按規定好的先後時間順序一步一步執行的,這些執行過程構成了系統的操作時序。
        ​​
    • 其他微處理器
      • 80486CPU(詳情見P50P67
  • 尋址方式

    • 指令系統概述
      • 指令的基本概念
        • 指令是控制計算機完成指定操作並能夠被計算機所識別的操作命令。
          計算機通過執行程序來完成指定的任務,而程序是由完成一個完整任務的一系列有有序指令組成的。每種計算機都有一套能反映計算機全部功能的指令,這些所有指令的集合稱爲該機的指令系統。指令系統定義了計算機硬件所能完成的基本操作,其功能的強弱在一定程度上決定了硬件系統性能的高低。指令系統也是計算機硬件和軟件之間的橋樑,是彙編語言程序設計的基礎。
        • 機器指令是一組二進制編碼的指令,是計算機能夠直接識別和執行的指令。用助記符或符號來表示操作碼或操作數的指令就是彙編指令。彙編指令與機器指令間是一一對應的
      • 指令格式
        • 指令的組成
          • 計算機機中指令通常由操作碼和操作數兩部分構成。操作碼部分規定計算機要執行的操作。操作數部分(又稱地址碼)用來描述該指令要操作的對象。
            一個指令字中包含二進制代碼的位數,稱爲指令字長度。
            指令字長度等於機器字長的指令,稱爲單字長指令。
            指令字長度等於半個機器字長的指令​​,稱爲半字長指令。指令字長度等於兩個機器字長的指令,稱爲雙字長指令。
             
        • 8086彙編指令格式
          • 格式如下: [ 標號:] 操作碼 操作數 [ ;註釋 ]
            1)標點
            標號表示一條指令在代碼段中的偏移地址。在彙編源程序中只有在需要轉向一條指令時,才爲該指令設置標號,以便在轉移或循環指令中直接引用這個標號。標號和其後的操作碼之間必須用冒號分隔。
            2)操作碼
            操作碼又稱爲指令碼或助記符,用來規定計算機要執行的具體操作。
            3)操作數
            操作數是指令執行過程中參與指令操作的對象,它的表現形式比較複雜,可以是操作數本身,也可以說是操作數地址或是地址的一部分,還可以是指向操作數地址指針或其他有關操作數據的信息。注意:當是雙操作數時,兩個操作數間必須用逗號隔開,並稱逗號左邊的操作數爲目的操作數,逗號右邊的操作數爲源操作數。​​​​
        • 操作數類型
          • 立即操作數
            立即操作數簡稱立即數,是指具有固定數值的操作數(即常數)。
          • 寄存器操作數
            事先存放在CPU8個通用寄存器和4個段寄存器中的操作數爲寄存器操作數,在指令執行時只要知道寄存器名就可以尋找到操作數。寄存器操作數既可以作爲源操作數使用,也可以作爲目的操作數使用。
          • 存儲器操作數
            事先存放在內存中的操作數爲存儲器操作數,在指令中,只要知道存放操作數的存儲單元的偏移地址就可以尋找到該操作數,存儲器操作數既可以作爲源操作數使用,也可以作爲目的操作數使用。
    • 立即尋址(MOV  BL,5102H​
      立即尋址方式所提供的操作數直接包含在指令中,此操作數緊跟在操作碼後面,與操作碼一起存放於內存的代碼段,在CPU取指令時,立即數隨指令碼一起取出並直接參與運算。立即尋址方式中的操作數只能用於源操作數,主要用來給寄存器或存儲單元賦初值。
       
    • 寄存器尋址(MOV  AX,CX​)
      寄存器尋址的操作數存放在CPU的某個寄存器中,在指令中,寫出指定的指定的寄存器名即可。
       
    • 存儲器尋址
      在存儲器尋址方式中,操作數存放在內存的存儲單元中,執行指令時,CPU要訪問到操作數必須先計算出存放該操作數的存儲單元在內存中的物理地址,然後才能進行數據讀/寫的操作。
      • 直接尋址(MOV  AX,[2000H]​
        在直接尋址方式中,指令中的操作數部分直接給出操作數的偏移地址,且該地址與操作碼一起被放在代碼段中。
         
      • 寄存器間接尋址(MOV AX,[BX]
        在寄存器間接尋址方式中,操作數的偏移地址在指令指明的寄存器中,即寄存器的內容就是操作數的偏移地址,而操作數存放在存儲器中。對於寄存器間接尋址,存放操作數偏移地址的寄存器只能是BXBPSIDI
         
      • 寄存器相對尋址(MOV AX,COUNT[BX]
        在寄存器相對尋址方式中,操作數的偏移地址由一個基址或變址寄存器與指令中指定的8位或16位位移量形成。即EA = {BX,BP,SI,DI}+(8/16位)位移量。
      • 基址變址尋址(MOV AX,[BX][DI]
        在基址變址尋址方式中,操作數的偏移地址由一個基址寄存器(BXBP)和一個變址寄存器(SIDI)的內容相加而成。
      • 基址變址相對尋址(MOV DX,disp[BX][DI]
        在基址變址相對尋址方式中,操作數的偏移地址由一個基址寄存器、一個變址寄存器,同時還用一個由指令中指定的8位或16位位移量三者內容之和的形成。
  • 指令系統

    • mem:存儲器操作數。 opr:泛指各種類型的操作數。 src:源操作數。 dest:目的操作數。 label:標號。 disp8位或16位位移量
    • port:輸入輸出端口,可用數字或表達式表示。 [ ] :整體上是一存儲器操作數。 reg:寄存器。 count:移位次數。可用是1CL S_ins:串操作指令。
    • 數據傳送類指令
      • 通用數據傳送指令 MOV (格式:MOV dest,src
        功能:將源操作數src的內容傳送給目的操作數dest ,源操作數內容不變。
        規定:(1)兩個操作數的數據類型須匹配,即要同爲8位或16位數據;兩個操作數不能同時爲段寄存器;也不能同時爲存儲器操作數。
        2)操作數不能出現二義性,即至少一個操作數需明確類型。
        3)代碼段寄存器CS不能作爲目的操作數使用,但可以作爲源操作數。
        4)立即數不能作爲目的操作數使用,也不能直接傳送給段寄存器。
        5)指令指針寄存器 IP 即不能作爲目的操作數使用,也不能作爲源操作數使用。​​​​​
      • 交換指令 XCHG(格式:XCHG dest,src
        功能:將源操作數和目的操作數的內容相互交換。兩個操作數類型需匹配。交換不能同時爲兩個存儲器操作數。
      • 堆棧操作指令PUSHPOP PUSH 指令格式:PUSH src )( POP 指令格式:POP dest
        PUSH指令功能:將指令中指定的16位操作數src壓入堆棧,該操作數可以是通用寄存器操作數、存儲器操作數或者是段寄存器操作數。
        POP指令功能:將堆棧棧頂指針SP所指的16位字內容彈出給指令中指定的操作數。POP指令中的操作數可以是通用寄存器,和存儲器或段寄存器操作數(CS除外)。
        8086堆棧的使用規則:
        1)堆棧的使用要遵循後進先出(LIFO)準則。
        2)堆棧的存取每次必須是一個字(16位),即堆棧指令中的操作數必須是16位。
        38086CPU堆棧操作可以使用除立即尋址以外的任何尋址方式。​​​​
         
      • 地址傳送指令
        • 取有效地址指令LEA(格式:LEA reg,mem
          功能:將源操作數的有效地址送到指令中指定的寄存器中。源操作數只能是一個存儲器操作數,目的操作數只能是一個16位通用寄存器。
        • 地址指針裝到DS和指定的寄存器指令LDS(格式:LDS reg,mem
          功能:從指令的源操作數所指定的存儲單元開始,將連續4個字節存儲單元中的第一個內容送入指令中指定的通用寄存器中,而第二字內容送入段寄存器DS中。
        • 地址指針裝到ES和指定的寄存器指令LES
          LES指令的操作與LDS指令基本類似,只是第二個字的內容送往的段寄存器是ES
      • 標誌寄存器傳送指令
        • 讀取標誌指令LAHF(格式:LAHF
          功能:將標誌寄存器的低8位讀出後傳送給AH寄存器。
        • 設置標誌寄存器指令SAHF(格式:SAHF
          功能:將AH寄存器內容送到標誌寄存器的低8位。
        • 標誌寄存器壓棧指令PUSHF(格式:PUSHF
          功能:先執行棧頂指針SP2操作,然後再將16位標誌寄存器的所有標誌位送入到SP指向的棧頂字單元中,其操作過程與PUSH指令類似。
        • 標誌寄存器出棧指令POPF(格式:POPF
          功能:將堆棧棧頂指針所指的一個字內容彈出來送到標誌寄存器中,然後再將SP的值加2,其操作過程與POP指令類似。
      • 查錶轉換指令XLAT(格式:XLATXLAT 表首地址)
        功能:實現將AL中的值變換成內存表格中的對應值。XLAT指令的操作數是隱含的,所執行的操作是將BX中的值爲基地址、AL中的值爲位移量所形成的偏移地址所對應的字節存儲單元中的內容送入AL中,即執行AL←[BX+AL]操作。
    • 算術運算類指令
      • 加法指令
        • 加法指令ADD(格式:ADD dest,src)
          功能:將源操作數的內容和目的操作數的內容相加後的結果保存在目的操作數中,並根據結果設置相關標誌位。(注意:源操作數和目的操作數應同時爲帶符號數或無符號數,且兩者的數據類型應匹配。)
        • 帶進位的加法指令 ADC(格式: ADC dest,src
          功能:ADCADD功能基本相同,唯一不同的是要加上當前進位標誌位的值。
        • 1 指令 INC(格式:INC dest
          功能:將指定操作數的內容加1,再回送給該操作數。
      • 減法指令
        • 減法指令 SUB格式:SUB dest,src
          功能:將目的操作數內容與源操作數內容相減之後的結果存入目的操作數中。
        • 帶借位的減法指令 SBB(格式:SBB dest,src
          功能:指令執行時,用目的操作數減去源操作數,還要減去標誌位CF的值,並將相減的結果回送給目的操作數。
        • 1 指令 DEC(格式:DEC dest
          功能:完成對指令中指定的操作數內容減1 後,又回送給該操作數。
        • 求補指令 NEG (格式:NEG dest
          功能:對指令中指定的操作數內容求補後,再將結果回送給該操作數。該操作數只能是通用寄存器操作數或存儲器操作數。
        • 比較指令CMP(格式:CMP dest,src
          功能:CMP指令除了不回送相減結果外,其他與SUB相同。CMP常用於判斷兩數的大小是否相等。
      • 乘法指令
        • 無符號數乘法指令 MUL (格式:MUL opr
          功能:將指令中指定的操作數與隱含的被乘數(都爲無符號數)相乘。
        • 帶符號數乘法指令 IMUL
      • 除法指令
        • 無符號數除法指令 DIV(格式:DIV src
          功能:用指令中的顯式操作數去除隱含操作數(都爲無符號數)。
        • 帶符號數除法指令 IDIV
          DIV基本相同,只是要求操作數必須爲用補碼錶示的帶符號數。
      • 符號擴展與符號擴展指令
        • 符號擴展
          對數據位數的擴展具體分爲符號擴展和零擴展兩種。當要擴展的數據是無符號數時,可採用零擴展,即在最高爲前擴展0,補充夠位數即可;當要擴展的數據是帶符號數時,需採用符號擴展,即在最高位前擴展符號爲來補充夠位數。(注意:如果要擴展的數是補碼形式表示的帶符號數,則對其符號位擴展後,結果仍是該數的補碼。)
        • 符號擴展指令
          • 字節擴展爲字指令 CBW(格式:CBW
            功能:該指令的隱含操作數爲AHAL,功能是用AL的符號位去填充AH
          • 字擴展爲雙字指令 CWD (格式:CWD
            功能:該指令的隱含操作數爲DXAX,功能是用AX的符號位去填充DX
    • 邏輯運算和移位類指令
      • 邏輯運算指令
        • 邏輯與指令 AND(格式:AND dest,src
          功能:將兩個操作數的內容進行按位相運算,並將結果回送目的操作數。源操作數可以是8/16位通用寄存器、存儲器操作數或立即數,而目的操作數只允許是通用寄存器或存儲器操作數。注意:段寄存器既不能作爲源操作數也不能作爲目的操作數,兩個操作數不能同時爲存儲器操作數。
        • 邏輯或指令 OR(格式:OR dest,src
          功能:將兩個操作數的內容進行按位相運算,並將結果回送目的操作數。指令對源操作數和目的操作數的規定及對標誌位的影響同AND指令。
        • 邏輯異或指令 XOR(格式:XOR dest,src
          功能:將兩個操作數的內容進行按位相異或運算,並將結果回送目的操作數。
        • 邏輯非指令 NOT(格式:NOT dest
          功能:將操作數的內容按位求反,並將結果回送到目的操作數中,指令中的操作數可以是8/16位的寄存器或存儲器操作數,但不能是立即數。
        • 測試指令 TEST(格式:TEST dest,src
          功能:TEST指令所完成的操作以及對操作數的約定和對標誌位的影響都與AND指令相同,所不同的只是TEST指令不回送結果給目的操作數。
      • 移位指令
        • 非循環移位指令
          • 邏輯左移指令 SHL(格式:SHL mem/reg,count
            功能:將目的操作數的內容向左移位,移位次數由源操作數count決定,count可以是1CL。每左移一位,目的操作數的最高位移入CF標誌位,最低位補0
          • 邏輯右移指令 SHR
            功能:將目的操作數的內容向右移位,每右移一位,操作數的最低位移入CF標誌,最高位補0
          • 算術左移指令 SAL
          • 算術右移指令 SAR
            功能:將目的操作數的內容向右移位,移位次數由源操作數給定,每右移一次,操作數最低位移入CF標誌位,最高位在移入次高位的同時其值不變。這樣移位後最高位和次高位的值相同,即符號位始終保持不變。
        • 循環移位指令
          • 循環左移指令 ROL
            功能:將目的操作數的內容向左移動源操作數所規定的位數,每移一位,最高位在進入進位位CF的同時,也移入空出的最低位,形成環路。
          • 循環右移指令 ROR
            功能:將目的操作數的內容向右移動源操作數所規定的位數,每移一位,最低位在進入進位位CF的同時,也移入空出的最高位,形成環路。
          • 帶進位循環左移指令 RCL
            功能:將目的操作數的內容向左移動源操作數所規定的位數,每移一位,最高位在進入標誌位CF,而CF原先的狀態值移入最低位。
          • 帶進位序號右移指令 RCR
            功能:將目的操作數的內容向右移動源操作數所規定的位數,每移一位,最低位在進入標誌位CF,而CF原先的狀態值移入最高位。
    • 控制轉移類指令
      • 無條件轉移指令 JMP
        • 段內直接轉移(格式:JMP label
          功能:無條件轉移到本段label所指的目標地址處執行,即執行“IP←IP+位移量操作。指令被彙編時,彙編程序會計算出JMP指令的下一條指令到label所指示的目標地址之間的位移量。
        • 段內間接轉移(格式:JMP opr
          功能:無條件轉移到本段opr所指定的目標去執行程序。opr可爲一寄存器或存儲器操作數,在其中預防着要轉移的目標地址。執行JMP指令時,將opr中取得的偏移地址作爲新的指令指針裝入到IP中,實現程序轉移。
        • 段間直接轉移(格式:JMP FAR PTR label
          功能:無條件轉移到另外一個代碼段中標號label所指的目標地址處去執行。指令中的FAR PTR爲遠轉移屬性在操作符,表示轉移是在段間進行,label爲另外一個代碼段中目標地址的標號。
        • 段間間接轉移(格式:JMP DWORD PTR opr
          功能:無條件地轉移到另外一個代碼段中由操作數所指定的目標地址去執行。指令中的操作數opr只能是一個存儲器操作數,涉及連續4個存儲單元,通過DWORD PTR明確類型。指令執行時,由opr的尋址方式確定出具體的有效偏移地址,將該偏移地址所指的雙字單元中的低字內容送給IP,高字內送給CS,形成新的指令執行地址CS:IP,從而實現段間間接轉移。
      • 條件轉移指令(詳情見P106
      • 循環控制指令
        • LOOP label
          執行CX←CX-1操作。若CX≠0,則轉移到目標地址label處;若CX=0,順序執行下一條指令。
        • LOOPZ/LOOPE label
          執行CX←CX-1操作。若CX≠0ZF=1,則轉移到目標地址處;否則順序執行下一條指令。
        • LOOPNZ/LOOPNE label
          執行CX←CX-1操作。若CX≠0ZF=0,則轉移到目標地址處;否則順序執行下一條指令。
        • JCXZ label
          CX=0,則轉移到目標地址label處;若CX≠0,則順序執行下一條指令。
      • 子程序調用與返回指令
        • 子程序調用指令 CALL
          • 段內直接調用(格式:CALL opr
            指令中的opr爲子程序名,代表子程序的入口地址。指令的執行過程爲:先保存斷點,即將CALL指令的下一條指令的IP值入棧,然後再將opr所表示的偏移地址送IP,轉到子程序處去執行指令。
          • 段內間接調用(格式:CALL opr
            段內間接調用所執行的操作同段內直接調用,只是這裏的opr只能用16位的寄存器或存儲器操作數表示,具體對操作數的約定完全同JMP 指令中的段內間接轉移形式。
          • 段間直接調用(格式:CALL FAR PTR opr
            段間直接調用的子程序名可直接寫在指令中,但在其之前必須冠以FAR PTR屬性。執行過程是先保存斷點,即將CALL指令的下一條指令的CSIP分別壓入堆棧;然後再將opr所表示的子程序的偏移地址送IP,段地址送CS,實現段間調用。
          • 段間間接調用(格式:CALL DWORD PTR opr
            段間間接調用要求指令中的操作數opr所表示的子程序地址只能用存儲器操作數表示,涉及連續4個存儲單元。執行時,將前兩個單元的字內容(子程序的偏移地址)送IP,後兩個單元的字內容(子程序所在段的段地址)送CS,實現段間調用。
        • 子程序返回指令 RET(格式:RET [n]
          功能:執行從堆棧頂部彈出斷點,恢復原來的IP(或IPCS)返回調用處繼續往下執行。該指令通常放在子程序的最後。
      • 中斷調用及返回指令
        • 中斷指令 INT(格式:INT n
          功能:產生一箇中斷類型號爲n的內部中斷,其中,n值是一個0~FFH範圍內的整數。
          INT n 指令的具體執行步驟和操作爲:標誌寄存器內容壓入堆棧,將標誌位IFTF清零;將當前的CSIP值壓入堆棧,將中斷服務程序的入口地址,方別裝入CSIP
          INT 指令 隻影響IFTF標誌位。
        • 溢出中斷指令 INTO(格式:INTO
          功能:產生一個溢出中斷。該指令是INT指令的特例,中斷類型號隱含爲4(即INT4),只有當某運算結果產生溢出(OF=1)時才產生中斷。該指令也隻影響標誌位IFTF
        • 中斷返回指令 IRET(格式:IRET
          功能:退出中斷過程,返回到中斷是的斷點處繼續執行。所有中斷程序,不管是由軟件引起還是硬件引起,其最後一條指令必須是IRET。執行該指令首先將堆棧中的斷點地址彈出到IPCS,程序返回到原斷點處,然後接着將INT指令執行時壓入到堆棧的 標誌字內容彈出到標誌寄存器以恢復中斷前的標誌狀態。
    • 串操作類指令
      • 串傳送指令 MOVS(格式:MOVS dest,src (一般格式) MOVSB(字節格式) MOVSW(字格式))
        格式:將DSSI所指的源串中的一個字節或字,傳送到由ESDI所指的目的串中,同時根據方向標誌位DF的值自動修改SIDI的值。
      • 讀字符串指令 LODS(格式:LODS src(一般格式) LODSB(字節格式) LODSW(字格式))
        功能:將DSSI指定的源串中的一個字節或字內容送到累加器ALAX中,同時相應修改SI值。該指令不影響標誌位。
      • 寫字符串指令 STOS(格式:STOS dest STOSB STOSW)
        功能:把ALAX中的值送至ESDI所指的字節或字存儲單元中,同時修改地址指針DI。指令不影響任何標誌位。
      • 串比較指令 CMPS(格式:CMPS src,dest CMPSB CMPSW
        功能:將由DSSI所指的源串中的一個字節或字減去由ESDI所指的目的串中的一個字節或字,相減結果不回送目的操作數,僅反映在狀態標誌位上,同時修改SIDI值。該指令對6個狀態標誌位都有影響。
      • 串搜索指令 SCAS(格式:SCAS dest SCASB SCASW
        功能:將ALAX中的內容減去由DI指定的目的串中字節或字內容,根據相減結果影響標誌位,但不保存結果,同時修改DI
      • 重複前綴
        • REP(格式:REP S_ins
          指令中的S_ins表示一具體串指令。指令的功能是當CX≠0時,REP後的串指令被重複執行。具體操作過程如下:
          1)首先判斷CX是否爲0,若CX=0,則退出REP操作,否則重複執行串指令;
          2)根據DF標誌位修改地址指針
          3)將CX1後再回送CX
          4)重複(1~3
          REP指令常用作MOVSSTOS指令的前綴​​​​​
        • REPZ/REPE(格式:REPZ/REPE S_ins
          功能:當CX≠0ZF=1時,重複執行其後緊跟的串操作指令S_ins。該指令的操作過程同REP,所不同的只是判斷條件中,重複串指令操作的次數不僅與CX有關,還與ZF有關。REPZ後面常跟CMPSSCAS串指令。
        • REPNZ/REPNE (格式:REPNZ/REPNE S_ins
          功能:當CX≠0ZF=0時,重複執行其後的串操作指令S_ins。該指令也常用作CMPSSCAS指令的前綴。
    • 處理器控制類指令(詳情見P117
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章