天天看點

微機原理之彙編語言指令集1.1 概述1.2 操作數1.3 尋址方式1.4 彙編語言文法1.5 彙編語言基本指令集

彙編語言指令集

  • 1.1 概述
      • 1.1.1 指令集體系結構、機器指令和符号指令
      • 1.1.2 符号指令的書寫格式
  • 1.2 操作數
      • 1.2.1 通用寄存器中的操作數
      • 1.2.2 段寄存器和指令指針寄存器
      • 1.2.3 标志寄存器
  • 1.3 尋址方式
      • 1.3.1 立即尋址
      • 1.3.2 寄存器尋址
      • 1.3.3存儲器操作數尋址
        • 1.3.3.1 直接尋址
        • 1.3.3.2 寄存器間接尋址
        • 1.3.3.3 基址尋址
        • 1.3.3.4 變址尋址
        • 1.3.3.5 基址加變址尋址
      • 1.3.4 尋址方式小結
  • 1.4 彙編語言文法
      • 1.4.1 彙編語言語句類型和格式
      • 1.4.2 名字項
      • 1.4.3 操作數項
      • 1.4.4 操作項
  • 1.5 彙編語言基本指令集
      • 1.5.1 傳送類指令
          • 1.5.1.1 通用傳送指令
          • 1.5.1.2 堆棧操作指令
      • 1.5.2 算術運算指令
          • 1.5.2.1 基本四則運算
          • 1.5.2.2 BCD碼調整指令
      • 1.5.3 轉移和調用指令
          • 1.5.3.1 無條件轉移指令
          • 1.5.3.2 條件轉移指令
          • 1.5.3.3 子程式調用與傳回指令
          • 1.5.3.4 軟體中斷與中斷傳回指令
      • 1.5.4 邏輯運算和移位指令
      • 1.5.6 處理機控制指令
          • 1.5.6.1 标志位控制指令
          • 1.5.6.2 其他控制指令

1.1 概述

1.1.1 指令集體系結構、機器指令和符号指令

計算機技術中,指令是指在某種計算機結構中定義的單個CPU操作,每條指令執行某一個特定的操作,如将兩數字求和傳回。在該種計算機結構中,CPU所支援的所有指令構成的集合稱為指令集。

将指令編碼成為二進制格式的序列,稱為機器指令。通常CPU隻能識别和執行機器指令。而由于在不同計算機中,CPU設計不相同,進而使得相同的代碼被編碼成不同的機器指令。人們将指令集和指令集編碼(即指令集對應的機器指令集)稱為CPU的指令集體系結構。

常見的指令集體系結構包括精簡指令集計算機(Reduced Instruction Set Computing ,RISC)和複雜指令集計算機(Complex Instruction Set Computing ,CISC)。RISC體系中常見的是IBM公司的Powerpc、Oracle公司的SPARC、ARM公司的ARM等,對應的主要作業系統是Unix以及iOS、Android等移動作業系統。CISC體系中常見的CPU是80x86架構,如Intel公司的Pentium等,AMD公司的Athlon等,對應的主要作業系統是Microsoft windows以及Linux。

早期計算機程式大都直接使用機器指令,後由于其繁瑣、易錯、可讀性較差等諸多弊端,目前在編寫彙編語言程式時一般采用統一定義的一套特定助記符和書寫格式,把指令表示成字元串形式的序列,也即符号指令。

在指令集體系結構中,每條指令都有其對應的機器指令和符号指令,例如

将指定數值移入特定寄存器:

指令:     1234H -->AX 
機器指令: 101110000011010000010010
符号指令: MOV AX,1234H
           

或将兩寄存器中的内容求和,結果傳回其中某寄存器:

指令:     AX+BX-->AX
機器指令: 0000001111000011
符号指令: ADD AX,BX
           

1.1.2 符号指令的書寫格式

以80x86指令集為例,符号指令書寫格式如下:

标号: + 操作碼助記符 + 空格+操作數助記符(多操作數之間以“,”隔開) + ;注釋

格式說明如下:

(1) 符号指令的核心部分是操作碼和操作數。操作碼表示指令的功能,操作數即指令的操作對象,分别采用操作碼助記符和操作數助記符表示,操作碼和操作數之間采用空格符或Tab符隔開。

(2) 依據操作數數量分為單操作數指令和多操作數指令;有兩個操作數時,位于“,”左側的為目标操作數,右側的為源操作數;多位元組操作數在存儲器中的存放順序依據最小端規則,即低位位元組存放在低位址單元,高位位元組存放在高位址單元(很重要!)。

(3) 标号表示該條指令地質的符号位址。當該條指令作為分支或循環等指令的轉移目标或作為程式開始執行的首條語句時,需設定标号,其餘情況可忽略。标号和操作碼助記符之間需以“:”隔開。

(4) 注釋為程式設計過程中對特定資訊的解釋說明,可忽略。

(5) 一條符号指令對應的機器指令一般由若幹位元組構成,在存儲器中連續存放。指令在存儲器中占用的位元組數稱為指令長度,依其可劃分為單位元組指令和多位元組指令,其中,第一位元組所在存儲器單元的位址稱為指令位址。例如,符号指令“ADD AX,BX”對應的機器指令為0000001111000011,在存儲器中占用2B,其指令長度為2B,若首位元組單元在存儲器的實體位址為12345H,則該指令的實體位址為12345H。

1.2 操作數

1.2.1 通用寄存器中的操作數

指令的操作數存放在寄存器中時稱為寄存器操作數。寄存器操作數的字長由寄存器名稱決定。如寄存器EAX,其長度為32位,可存儲32位字長操作數;當使用AX作為寄存器名稱時,隻能使用32位寄存器的低16位部分,此時AX是一個16位寄存器,可存儲16位字長操作數;類似的,當使用AH作為寄存器名稱,隻能使用AX的高8位,此時AH是一個8位寄存器;使用AL作為寄存器名稱,隻能使用AX的低8位,此時AL是一個8位寄存器,AH和AL都可以存儲8位字長操作數。

EBX、ECX、EDX的寄存器名稱和操作數字長的對應方法與EAX一緻,而ESP、EBP、EDI、ESI4個寄存器邏輯結構隻有32位和16位字長兩種,對應的16位寄存器名稱分别為SP、BP、DI、SI。

1.2.2 段寄存器和指令指針寄存器

32位微處理器中共有6個16位段寄存器和1個32位指令指針寄存器。代碼段寄存器CS以及指令指針寄存器IP分别存放CPU将要取出的指令的段基址和偏移位址。

1.2.3 标志寄存器

指令的操作對象除了資料外還包括狀态。多數情況下,實驗标志寄存器中的某些标志位來存儲狀态。标志位分為;兩類:狀态标志和控制标志。狀态标志用于某些指令操作的前提狀态以及指令操作的完成後的結果狀态。控制标志可以設定CPU的某些功能,例如中斷;或者設定指令的操作功能,例如串操作指令。控制标志值可通過相應指令進行設定。

标志寄存器中的各個标志位都有确定功能,對應如下(前6位為狀态标志,其餘為控制标志):

1. C标志(進位/借位标志)

2. A标志 (輔助進位/借位标志)

3. S标志(符号标志)

4. Z标志(全零标志)

5. P标志(奇偶标志)

6. O标志(溢出标志)

7. D标志(方向标志)

8. I标志(中斷允許标志)

9. T标志(陷阱标志)

10. IOPL标志(I/O特權級标志)

11. NT标志(任務嵌套标志)

12. R标志(恢複标志)

13. VM标志(虛拟标志)

14. AC标志(對準檢查标志)

1.3 尋址方式

指令操作數一共有4種存放位置:

(1)操作數作為本條指令的一部分,直接包含在指令中,這種操作數稱為立即數。

(2)操作數存放在CPU的11寄存器中,這種操作數稱為寄存器操作數。

(3)操作數存放在計算機的存儲器中,這種操作數稱為存儲器操作數或記憶體操作數。

(4)操作數存放在計算機接口電路的端口中,這種操作數稱為I/O端口操作數。

尋址方式就是在指令中,使用特定的助記符或助記符表達式(位址表達式),告知CPU如何計算出操作數的位址,進而正确地存取操作數,以便進行後續的指令操作。一般而言,尋址方式就是指CPU尋找到操作數的方式。對應操作數4種存放位置,有4類尋址方式,分别為:立即尋址、寄存器尋址、存儲器操作數尋址、I/O端口操作數尋址。在80486處理器中,僅包含前3類尋址方式,是以隻對前3種進行介紹。

1.3.1 立即尋址

立即尋址: 操作數包含在指令中,是指令的一個組成部分,CPU讀入該條指令後同時取得了操作數。采用立即尋址方式獲得的操作數稱為立即數。

使用示例:

MOV AL,10101111B        ;指令執行後(AL)=AFH
MOV BX,1234H            ;指令執行後(BX)=1234H
MOV CX,0A234H           ;指令執行後(CX)=A234H
MOV AH,-2               ;指令執行後(AH)=FEH
MOV BL,'A'              ;指令執行後(BL)=41H,指令等同于MOV BL,41H
MOV AX,11*12            ;指令執行後(AX)=0084H,指令等同于MOV AX,132
           

注意事項:

(1)立即尋址方式常用于為寄存器或記憶體操作數指派,并且隻能用于源操作數,不可用于目标操作數。

(2)彙程式設計式在進行彙編時,會将不同進制的立即數一律彙編為等值的二進制數,負數則用其補碼形式表示。

1.3.2 寄存器尋址

寄存器尋址: 将操作數存放在寄存器中,寄存器的名稱在指令中的操作數中給出。在寄存器中存取操作數,可以獲得較快的通路速度。

使用示例:

MOV EAX,12345678H       ;指令執行後(EAX)=12345678H,目标操作數采用寄存器尋址,源操作數采用立即尋址
ADD CH,CL               ;将CH和CL中的數相加的結果存入CH,兩操作數均采用寄存器尋址
INC SI                  ;将SI中的數加1,操作數采用寄存器尋址
           

1.3.3存儲器操作數尋址

存儲器操作數尋址: 也被稱為記憶體操作數尋址,操作數存放在存儲器中。

由于程式被裝載入存儲器中的位置由作業系統在程式載入時決定,在編寫程式時無法确定指令中使用的存儲單元在程式載入存儲器後的實體位址,隻能使用邏輯位址來描述指令中用到的存儲單元,CPU在分析指令時使用内部的段頁式管理部件将指令中的邏輯位址轉化為對應的實體位址,再通過總線系統通路實際的實體存儲單元。那麼根據不同應用場景下,邏輯位址中偏移位址表達式的不同格式,共有5種存儲器操作數尋址方式:直接尋址、寄存器間接尋址、基址尋址、變址尋址、基址加變址尋址。

1.3.3.1 直接尋址

直接尋址方式的操作數的邏輯位址有兩種書寫格式:

1)段寄存器名稱:[偏移位址]

使用示例:

ADD AL,DS:[45H]         ;取出資料段中偏移位址為0045H的存儲單元中的資料與AL中數相加,結果存入AL
MOV AX,ES:[1000H]       ;取出資料段中偏移位址為1000H的存儲單元中的資料送入AX
           

2)段寄存器名稱:變量名

使用示例:

實際應用中,直接尋址适用于存取單個記憶體操作數。

1.3.3.2 寄存器間接尋址

寄存器間接尋址也稱為間接尋址或間址,其邏輯位址書寫格式為:

段寄存器名稱:[間址寄存器]

偏移位址表達式給出的間址寄存器用于存放操作數的偏移位址。注:僅部分特定寄存器可作為間址寄存器使用,如下:

微機原理之彙編語言指令集1.1 概述1.2 操作數1.3 尋址方式1.4 彙編語言文法1.5 彙編語言基本指令集

使用示例:

MOV BX,BUF單元的偏移位址
MOV AH,DS:[BX]          ;用BX取出資料段中BUF單元的操作數,将其送入AH
           

實際應用中,寄存器間接尋址适合用于存取按一定規律連續存放在存儲器中的多個資料,如資料表格或數組。在間址寄存器中預先存放初始的存儲單元的偏移位址,在存取資料過程中按照一定規律對間址寄存器中的偏移位址進行增量或減量運算,進而實作對多個資料的通路。

1.3.3.3 基址尋址

基址尋址的邏輯位址書寫格式為:

段寄存器名稱:[基址寄存器+位移量] 或 段寄存器名稱:位移量[基址寄存器]

偏移位址表達式由基址寄存器和位移量的和構成。注:僅部分特定寄存器可作為基址寄存器使用,如下:

微機原理之彙編語言指令集1.1 概述1.2 操作數1.3 尋址方式1.4 彙編語言文法1.5 彙編語言基本指令集

使用示例:

MOV BX,BUF單元的偏移位址
MOV AH,DS:[BX+3]        ;基址尋址取出資料段BUF+3單元的操作數送入AH
           

實際應用中,基址尋址也适合用于存取按一定規律連續存放在存儲器中的多個資料,但由于增加了位移量參數,可以指定在資料表中通路的起始點,使用更加靈活。

1.3.3.4 變址尋址

變址尋址方式的邏輯位址書寫格式有兩種:

1)有比例因子的變址尋址,邏輯位址書寫格式為:

段寄存器名稱:[比例因子*變址寄存器+位移量] 或 段寄存器名稱:位移量[比例因子*變址寄存器]

偏移位址表達式由“比例因子*變址寄存器+位移量”構成。注:僅部分特定寄存器可作為變址寄存器使用,如下:

微機原理之彙編語言指令集1.1 概述1.2 操作數1.3 尋址方式1.4 彙編語言文法1.5 彙編語言基本指令集
MOV EBX,BUF的單元偏移位址
MOV AH,DS:[4*EBX+3]      ;變址尋址取出資料段4*EBX+3單元中的操作數送入AH
           

2)無比例因子的變址尋址,其邏輯位址書寫格式為:

段寄存器名稱:[變址寄存器+位移量] 或 段寄存器名稱:位移量[變址寄存器]

在無比例因子的情形下,能夠作為變址寄存器使用的通用寄存器如下:

微機原理之彙編語言指令集1.1 概述1.2 操作數1.3 尋址方式1.4 彙編語言文法1.5 彙編語言基本指令集

使用示例:

MOV SI,BUF單元的偏移位址
MOV AH,SS:[SI+3]         ;變址尋址取出堆棧段BUF+3單元中的操作數送入AH
           

實際應用中,變址尋址也适合用于存取按一定規律連續存放在存儲器中的多個資料,特别是帶比例因子的尋址方式,可以在存取資料時跨越比較大的位址範圍。

1.3.3.5 基址加變址尋址

基址加變址尋址方式是基址尋址和變址尋址方式的結合,根據是否帶有比例因子,基址加變址尋址方式的邏輯位址也有兩種書寫格式:

1)有比例因子的基址加變址尋址,邏輯位址書寫格式為:

段寄存器名稱:[基址寄存器+比例因子*變址寄存器+位移量] 或 段寄存器名稱:位移量[基址寄存器] [比例因子*變址寄存器]

2)無比例因子的基址加變址尋址方式,邏輯位址書寫格式為:

段寄存器名稱:[基址寄存器+變址寄存器+位移量] 或 段寄存器名稱:位移量[基址寄存器][變址寄存器]

實際應用中,基址加變址尋址方式由于有基位址和變址位址兩個參數,特别适合表示二維下标,對二維數組進行通路。使用了位移量的基址加變址尋址方式,常用于對結構體資料進行通路,此時用基位址定位結構體,用位移量定位結構體中的資料項,用變址位址定位資料項中的每個元素。

1.3.4 尋址方式小結

(1)尋址方式是 CPU 在執行指令時正确地找到操作數的方式。特别注意:尋址方式是針對指令中的操作數,并非針對指令,當指令有多個操作數時,各個操作數可能對應不同的尋址方式。例如:

MOV AX,1234H             ;源操作數1234H是立即尋址方式,位于 AX 中的目标操作數是寄存器尋址方式
           

(2)操作數在指令中時是立即尋址方式。立即尋址方式隻能用于源操作數,常用于給目标寄存器或存儲器單元指派。

(3)操作數在寄存器中時是寄存器尋址方式。對比存儲器操作數尋址,寄存器尋址方式能夠得到較快的資料存取速度。

(4)操作數在存儲器單元中時是存儲器操作數尋址方式。存儲器操作數尋址方式在使用時需要注意兩個問題:

①邏輯位址表達式在約定通路邏輯段時出現的可以省略不寫段寄存器名稱的現象也稱為段超越字首省略。當位址表達式使用的寄存器符合段超越字首省略的條件時,段寄存器名稱可以寫出,也可以不寫出,但不寫出是預設的彙編源程式的書寫風格,可以讓程式代碼簡潔。但同時需要注意:在不滿足段超越字首省略的條件時,省略不寫段寄存器會使指令出錯。

②5種不同的存儲器操作數尋址方式有各自的特點和應用場景:直接尋址方式用于通路單個記憶體操作數;寄仔器間接尋址、基址尋址和變址尋址用于通路具有連續排列規律的多個記憶體操作數;基址加變址尋址多用于通路二維資料或資料結構體。實際程式設計甲應該根據程式中的效據結構的特點正确選擇相應的尋址方式。

1.4 彙編語言文法

1.4.1 彙編語言語句類型和格式

1.4.2 名字項

1.4.3 操作數項

1.4.4 操作項

1.5 彙編語言基本指令集

1.5.1 傳送類指令

1.5.1.1 通用傳送指令

1)資料傳送指令 MOV

格式:MOV 目标操作數,源操作數

功能:将源操作數送到目标操作數中。源操作數不變。

2)符号擴充傳送指令 MOVSX

格式:MOVSX 目标操作數,源操作數

功能:将源操作數向高位擴充,符号位填補,使其與目标操作數字長一緻後再傳送到目标操作數,源操作數不變。

3)偏移位址傳送指令 LEA

格式:LEA 目标操作數,源操作數

功能:将源操作數的偏移位址傳送到目标操作數

4)交換指令 XCHG

格式:XCHG 目标操作數,源操作數

功能:完成源操作數和目标操作數之間的資料交換。

5)查表指令 XLAT

格式:XLAT 操作數(位元組表的表頭變量名)

功能:在資料段中定義一個由若幹單位元組數構成位元組型變量稱為位元組表,其第一個位元組單元的變量名稱為标頭變量名。

1.5.1.2 堆棧操作指令

1)通用進/出棧指令 PUSH/POP

格式:PUSH/POP 源操作數/目标操作數

功能:将源操作數壓入棧/從堆棧中彈出一個字或雙字,将其送入目标操作數中。

2)16位标志寄存器進/出棧指令 PUSHF/POPF

格式:PUSHF/POPF

(注:PUSHF和POPF指令的操作數未顯式寫出,即16位的标志寄存器)

功能:16位标志寄存器與堆棧的進出及相關操作,多用于保護現場和恢複現場。

3)32位标志寄存器進/出棧指令 PUSHFD/POPFD

格式:PUSHFD/POPFD

功能:類似于“PUSHF/POPF“。”

4)16位通用寄存器進/出棧指令 PUSHA/POPA

格式:PUSHA/POPA

功能:隐式操作數,即AX、BX等16位通用寄存器與堆棧相關操作。

5)32位通用寄存器進/出棧指令 PUSHAD/POPAD

格式:PISHAD/POPAD

功能:隐式操作數,即EAX、EBX等32位通用寄存器與堆棧相關操作。

1.5.2 算術運算指令

1.5.2.1 基本四則運算

1)二進制加法指令 ADD

格式:ADD 目标操作數,源操作數

功能:将源操作數和目标操作數求相加,結果送入目标操作數。

2)二進制帶進位加法指令 ADC

格式:ADC 目标操作數,源操作數

功能:将源操作數和目标操作數以及目前的C标志的值相加,結果送入目标操作數。

3)二進制數加1指令 INC

格式:INC 目标操作數

功能:目标操作數加1後送入目标操作數。

4)二進制數減法指令 SUB

格式:SUB 目标操作數,源操作數

功能:目标操作數減去源操作數,結果送入目标操作數。

5)二進制數帶借位減法指令 SBB

格式:SBB 目标操作數,源操作數

功能:目标操作數減去源操作數,再減去目前C标志的值,結果送入目标操作數。

6)二進制數減1指令 DEC

格式:DEC 目标操作數

功能:目标操作數減1後結果送入目标操作數。

7)二進制數求補指令 NEG

格式:NEG 目标操作數

功能:目标操作數求補(即用零減去目标操作數)後結果送入目标操作數。

8)無符号二進制數乘法指令 MUL

格式:MUL 乘數

功能:将同為無符号數并且字長相等的被乘數與乘數相乘,乘積送入指定寄存器。

9)有符号二進制數乘法指令 IMUL

格式:IMUL 乘數

功能:将同為有符号數并且字長相等的被乘數與乘數相乘,乘積送入指定寄存器。

10)無符号二進制數除法指令 DIV

格式:DIV 除數

功能:将同為無符号數并且字長為除數雙倍長度的被除數與除數相除,運算的道德商和餘數送入指定寄存器。

11)有符号二進制數除法指令 IDIV

格式:IDIV 除數

功能:将同為有符号數并且字長為除數雙倍長度的被除數與除數相除,運算的道德商和餘數送入指定寄存器。

12)符号擴充指令 CBW/CWD

格式:CBW/CWD

功能:将位元組轉換為字/雙字。

1.5.2.2 BCD碼調整指令

(1)組合BCD碼十進制數的算數運算調整指令

1)組合十進制數加法調整指令 DAA

格式:DAA

功能:對存放在AL中的由兩個組合BCD碼數相加得到的和進行修正,得到正确的結果。

2)組合十進制數減法調整指令 DAS

格式:DAS

功能:對存放在AL中的由兩個組合BCD碼數相減得到的差進行修正,得到正确的結果。

(2)未組合BCD碼十進制數的算術運算調整指令

1)未組合十進制數加法調整指令 AAA

格式:AAA

功能:對存放在AL中的由兩個未組合BCD碼數相加得到的和進行修正,得到正确的未組合BCD碼結果。

2)未組合十進制數減法調整指令 AAS

格式:AAS

功能:對存放在AL中的由兩個未組合BCD碼數相減得到的差進行修正,得到正确的未組合BCD碼結果。

3)未組合十進制數乘法調整指令 AAM

格式:AAM

功能:對存放在AX中的由兩個未組合BCD碼數相乘得到的積進行修正,得到正确的未組合BCD碼結果。

4)未組合十進制數除法調整指令 AAD

格式:AAD

功能:對存放在AX中的由兩個未組合BCD碼數轉換為等值的二進制數存放在AL中,并将AH清零。

1.5.3 轉移和調用指令

1.5.3.1 無條件轉移指令

1)無條件段内直接轉移 JMP

格式:JMP (标号/SHORT标号)

2)無條件段内間接轉移 JMP

格式:JMP (寄存器操作數/記憶體操作數)

3)無條件段間直接轉移 JMP

格式:JMP (FAR PTR 标号/标号)

4)無條件段間間接轉移 JMP

格式:JMP 記憶體操作數

1.5.3.2 條件轉移指令

條件轉移指令格式統一:

條件轉移指令助記符(JNC、JNZ、JNS等) 目标位址标号

功能:根據上一條指令設定的标志位情況轉移。

微機原理之彙編語言指令集1.1 概述1.2 操作數1.3 尋址方式1.4 彙編語言文法1.5 彙編語言基本指令集
微機原理之彙編語言指令集1.1 概述1.2 操作數1.3 尋址方式1.4 彙編語言文法1.5 彙編語言基本指令集

循環控制轉移指令:

微機原理之彙編語言指令集1.1 概述1.2 操作數1.3 尋址方式1.4 彙編語言文法1.5 彙編語言基本指令集
1.5.3.3 子程式調用與傳回指令

(1)子程式調用指令

1)段内直接調用指令 CALL

格式:CALL 過程名(子程式名)

2)段内直接調用 CALL

格式:CALL 寄存器操作數/記憶體操作數

3)段間直接調用指令 CALL

格式:CALL 過程名(子程式名)

4)段間間接調用指令 CALL

格式:CALL 記憶體操作數

(2)子程式傳回指令

1)段内無參數傳回指令 RET

格式:RET

2)段間無參數傳回指令 RET

格式:RET

3)段内有參數傳回指令 RET

格式:RET N(N為偶數)

4)段間有參數傳回指令 RET

格式:RET N(N為偶數)

1.5.3.4 軟體中斷與中斷傳回指令

1)軟體中斷指令 INT

格式:INT n(n為8位無符号整數)

功能:調用n型中斷服務子程式,其中n稱為中斷類型碼。

2)中斷傳回指令 IRET

格式:IRET

功能:中斷服務子程式中執行的最後一條指令。

1.5.4 邏輯運算和移位指令

(1)邏輯運算指令

1)取反運算指令 NOT

格式:NOT 目标操作數

功能:将目标操作數按位取反,結果送回目标操作數。

2)與運算指令 AND

格式:AND 目标操作數,源操作數

功能:将源、目标操作數進行按位邏輯“與”運算,結果送入目标操作數中。

3)或運算指令 OR

格式:OR 目标操作數

功能:将源、目标操作數進行按位邏輯“或”運算,結果送入目标操作數中。

4)異或運算指令 XOR

格式:XOR 目标操作數,源操作數

功能:将源、目标操作數進行按位邏輯“異或”運算,結果送入目标操作數中。

(2)移位指令

1)開環算術移位指令 SAL/SAR

格式:SAL/SAR( 操作數,移位次數)

功能:最高位重複,适用于計算有符号數乘除。

2)開環邏輯移位指令 SHL/SHR

格式:SHL/SHR (操作數、移位次數)

功能:最高位補零,适用于計算無符号數乘除。

3)不含進位閉環移位指令(也稱為循環移位指令) ROL/ROR

格式:ROL/ROR (操作數、移位次數)

功能:移出位進入C标,不再加入循環。

4)含進位的閉環移位指令 RCL/RCR

格式:RCL/RCR (操作數、移位次數)

功能:移出位進入C标,繼續補到下一輪末位,繼續循環。

(3)測試與位測試指令

1)測試指令 TEST

格式:TEST 目标操作數,源操作數

功能:将目标操作數和源操作數進行按位“與”運算,結果不送入目标操作數中,目标操作數不變,并對相應狀态标志位進行設定。

2)位測試指令 BT/BTR/BTS/BTC

格式:

BT 目标操作數,源操作數(注:位測試指令)

BTR 目标操作數,源操作數(注:位測試置0指令)

BTS 目标操作數,源操作數(注:位測試置1指令)

BTC 目标操作數,源操作數(注:位測試取反指令)

功能:将目标操作數中由源操作數指定的位(即測試位)的值送入C标志,源操作數不變。

(4)位掃描指令

1)向前位掃描指令 BSF

格式: BSF 目标操作數,源操作數

功能:從低位向高位(從右到左)掃描源操作數,将遇到的第1個1的位序号記錄在目标操作數中。

2)向後位掃描指令 BSR

格式:BSR 目标操作數,源操作數

功能:從高位向低位(從左到右)掃描源操作數,将遇到的第1個1的位序号記錄在目标操作數中。

(5)串操作指令

1.5.6 處理機控制指令

1.5.6.1 标志位控制指令

1)進位标志置0指令 CLC

格式:CLC

功能:0–>(C)。

2)進位标志置1指令 STC

格式:STC

功能:1–>(C)。

3)進位标志取反指令 CMC

格式:CMC

功能:/(C)–>(C)。

4)方向标志置0指令 CLD

格式:CLD

功能:0–>(D)。

5)方向标志置1指令 STD

格式:STD

功能:1–>(D)。

6)中斷标志置0指令 CLI

格式:CLI

功能:0–>(I)。

7)中斷标志置1指令 STI

格式:STI

功能:1–>(I)。

1.5.6.2 其他控制指令

1)空操作指令 NOP

格式:NOP

功能:執行時不進行任何操作,指令長度1位元組。

2)停機操作指令 HLT

格式:HLT

功能:執行時使CPU處于暫時停機狀态,但不進行任何操作,也不影響标志。

3)等待指令 WAIT

格式:WAIT

功能:執行時可以使CPU處于暫時停機狀态,直到外部中斷發生,但一旦外部中斷結束仍然傳回到暫時停機狀态。

4)換碼指令 ESC

格式:ESC 目标操作數

功能:将指定的記憶體單元中的内容發送到資料總線上(處理器交權)。

5)封鎖指令 LOCK

格式:LOCK

功能:處理器封鎖。

(未完,部分内容待續。)

繼續閱讀