80X86 彙編指令符號大全(上)

80X86 彙編指令符號大全
+、-、*、/∶算術運算符。

&∶宏處理操作符。宏擴展時不識別符號和字符串中的形式參數,如果在形式參數前面加上一個& 記號,宏彙編程序就能夠用實在參數代替這個形式參數了。

$∶地址計數器的值——記錄正在被彙編程序翻譯的語句地址。每個段均分配一個計數器,段內定義的所有標號和變量的偏移地址就是當前彙編地址計數器的值。

?∶操作數。在數據定義語句中,操作數用?,其作用是分配並保留存儲空間,但不存入確定的數據。

=∶等號僞指令——符號定義。對符號進行定義和賦值,功能與 EQU相似,但允許(重複)再定義。

:∶修改屬性運算符(操作符)——段操作符。用來臨時給變量、標號或地址表達式指定一個段屬性(不用缺省的段寄存器),自動生成一個“跨段前綴字節”。注意,段寄存器CS和ES不能被跨越,堆棧操作時也不能跨越SS。

;∶註釋符號。

%∶特殊宏操作符,用來將其後的表達式(通常是符號常數,不能是變量名和寄存器名)轉換成它所代表的數值,並將此數值的ASCII碼嵌入到宏擴展中。

( )∶1.運算符——用來改變運算符的優先級別。2.教材符號,表示括號內存儲單元(或寄存器)的內容。

< >∶宏調用時用來將帶間隔符(如空格,逗號等)的字符串(作爲實參)括起來。

[ ]∶1.運算符。方括號括起來的數是數組變量的下標或地址表達式。帶方括號的地址表達式必須遵循下列原則,①只有BX、BP、SI、DI這四個寄存器可在方括號內出現;②BX或BP可單獨出現在各方括號中,也可以與常數、SI或DI一起出現在方括號內,但不允許BX和BP出現在同一個方括號內;③SI和DI可以單獨出現在各方括號內,也可以與常數、BP或BX一起出現在方括號內,但不允許SI和DI出現在同一個方括號內;④一個方括號內包含多個寄存器時,它們只能作加法運算;⑤若方括號內包含基址指針BP,則隱含使用堆棧段寄存器SS提供段基址,否則均隱含使用數據段寄存器DS提供段基址。2.教材符號,表示其中的內容可省略。

.LIST∶ 僞指令。用於打開列表文件輸出。

.RADIX∶僞指令。把缺省的基數改爲2-16範圍內的任意基數。.RADIX不影響DD、DQ、DT僞指令,在這些僞指令中,輸入的數值只要沒有加上數據類型就認爲是十進制數。

.XLIST∶僞指令。用於關閉列表文件輸出。

%OUT∶僞指令。在彙編時顯示其後的信息。

AAA∶ 指令助記符——加法運算後的ASCII調整(非壓縮的BCD碼)。無操作數,調整的加法結果在AL中。AF和CF的狀態改變說明結果大於9。檢查AL的低四位是否爲合法的BCD碼(0-9),如果合法就清除AL的高四位以及AF和CF標誌。當AL的低四位表示的數大於 9或AF=1時, 將AL加 6,AH加1 ,並使AF和CF置位,清除AL中的高四位。任何一個A—F之間的數加上6 以後,都會使AL低 4位產生0-9之間的數,從而達到調整的目的。

AAD∶ 指令助記符——除法的ASCII調整(非壓縮的BCD碼)。在執行除法操作前,必須利用 AAD指令將非壓縮型 BCD碼錶示的數轉換成二進制數送AL。步驟是,先將被除數的高位數(AH中的內容)乘以10,然後加到AL的低位數中,接着將AH清零。

AAM∶ 指令助記符——乘法的ASCII調整(非壓縮的BCD碼)。用於將字節乘法的積轉換成兩個合法的十進制非壓縮碼。AAM不帶操作數,假定成績在AH和AL中,並將調整後的非壓縮碼送回AH和AL。爲了保證 AAM得到正確的結果,原乘數和被乘數必須是合法的非壓縮碼。指令執行時,AAM 用10(0AH) 除AL寄存器,並將除得的商和餘數分別送AH和AL寄存器,實現轉換。

AAS∶ 指令助記符——減法運算後的ASCII調整(非壓縮的BCD碼)。檢查AL的低四位是否爲合法的BCD碼(0-9),如果合法就清除AL的高四位以及AF和CF標誌。當AL的低四位表示的數大於 9或AF=1時, 將AL減 6,AH減1 ,並使AF和CF置1,清除AL中的高四位。

ADC∶ 指令助記符——帶進位加法(把CF的值加上)。用於多字節數的高字節加法運算。

ADD∶ 指令助記符——加法。參與運算的二操作數應該同時帶符號或不帶符號 ,並且長度一致。操作數可以是寄存器、存儲器或立即數,但不能同時爲存儲單元或段寄存器,立即數也不能作爲目的操作數。

AF∶ Auxiliary Carry Flag,輔助進位標誌,在標誌寄存器的第4字節。記錄運算時第 3位(半個字節)產生的進位值(置1)。該標誌用於對BCD碼的加減運算中。

AND∶邏輯運算符(在語句的操作數部分,彙編時完成)或邏輯操作指令助記符(在語句的操作碼部分,其運算在執行指令時完成)——按位與。只有相“與”的兩位全爲1 ,結果才爲1。某數自己與自己相“與”,操作數不變,進位標誌CF清0 。

ASSUME∶段定義僞指令——設定分段寄存器,格式爲"ASSUME 段寄存器:段名[,段寄存器名:段名]"。在代碼段的開始用來指出所有段與段寄存器的關係,確定某個段分配給哪個段寄存器。ASSUME只指出各段寄存器的分配,並沒有把段地址裝入相應的段寄存器。爲此,在代碼段中,還必須把數據段和附加數據段的段地址裝入相應的寄存器中。

AT∶僞指令——段定義(組合類型)。該段按絕對地址定位,段基址爲數值表達式的值,位移量爲0 。不能指定代碼段。

AX∶ Accumulator,通用寄存器,算術運算的主要寄存器。另外,所有的I/O指令都使用這一寄存器與外部設備傳送信息。其中AH是高8位,AL是低8位。

B∶ 數據類型後綴,表示二進制常量。

BP∶Base Pointer, 基址指針寄存器。可以與SS寄存器聯用來確定堆棧中任一存儲單元的地址。它指示堆棧中任一單元的偏移量。非堆棧進出指令要訪問堆棧,只能通過BP進行。

BX∶Base,通用寄存器。在計算存儲器地址時,經常用作基址寄存器。其中BH是高 8位,BL是低 8位。

BYTE∶僞指令——段定義(定位類型)。本段起始單元可以從任一地址開始,段間不留空隙,存儲器利用率最高。

CALL∶指令助記符——程序調用。
  一、段內直接調用:格式爲" CALL 過程名"。先把IP內容(子程序的返回地址,即CALL下一條指令的地址)壓入堆棧,然後IP轉移到子程序的入口地址。
  二、段內間接調用:格式爲" CALL WORD PTR OPD"。先把IP的內容壓入堆棧,然後IP指向(轉到)由尋址方式決定的EA。
  三、段間直接調用。格式爲"CALL FAR PTR 過程名"。先把CS和IP的內容壓入堆棧,然後在CS中裝入新的段地址,IP指向段內偏移地址。
  四、段間間接調用:格式爲"CALL DWORD PTR OPD"。 先把CS和IP的內容壓入堆棧,然後把尋址方式確定的有效地址所指定的一個字儲存單元的內容送入IP,下一個字存儲單元的內容(段首址)送入CS。

CBW∶指令助記符——字節轉換爲字。把AL中字節的符號擴展到AH中,若(AL)的最高有效位爲0 ,則(AH)=00;若(AH)的最高有效位爲1, 則(AH)=0FFH。

CF∶Carry Flag,進位標誌,在標誌寄存器的第0字節 ,記錄運算時從最高有效位產生的進位值(置1)。 作加法時,CF位可以用來表示無符號數的溢出(有符號數溢出用OF表示)。

CLC∶ 指令助記符——標誌(進位)設置。設置CF=0。

CLD∶ 指令助記符——清方向標誌。使DF=0 。這樣,當執行字節串操作指令時,地址自動增1 ;當執行字串操作指令時,地址自動增2 。

CLI∶ 指令助記符——中斷允許標誌設置。設置IF=0 。

CMC∶ 指令助記符——標誌(進位)設置。CF取反。

CMP∶ 指令助記符——比較。對於“ CMP AX,BX” ,如果是兩個無符號數比 較(減),若結果沒有產生借位,即CF=0, 則(AX)≥(BX);若CF= 1,則(AX)〈(BX)。 如果是兩個帶符號數比較,則 當沒有溢出(OF=0)時,若SF=0,則(AX)〉(BX) 若SF=1,則(AX)〈(BX) 當產生溢出(OF=1)時,若SF=0,則(AX)〈(BX) 多SF=1,則(AX)〉(BX) 簡煉的結論,若 OF 異或 SF=0,則(AX)〉(BX) 若 OF 異或 SF=1,則(AX)〈(BX)

CMPS∶指令助記符——串比較。通常用CMPSB或CMPSW。

CMPSB∶ 指令助記符——串比較。將DS段SI指出的字節數據減去ES段DI指出的字節數據(不保存結果),然後根據相減結果設置標誌位(兩個數據相等,則ZF=1)。 並由方向標誌DF修改SI 和DI中的地址,即當DF=0時,地址都加1; 當DF=1時, 地址都減1 。

CMPSW∶ 指令助記符——串比較。將DS段SI指出的字數據減去ES段DI指出的字數據(不保存結果),然後根據相減結果設置標誌位(兩個數據相等,則ZF=1)。 並由方向標誌DF修改SI 和DI中的地址,即當DF=0時,地址都加2; 當DF=1時, 地址都減2 。

COMMON∶僞指令——段定義(組合類型)。該段與其它模塊中所有也說明爲COMMON的同名,同'類別'段共享相同的存儲區域,即這些段的起始地址都相同,共享的公共存儲區域的長度是各模塊同名段中最大的長度。使用COMMON方式可以使不同模塊中的不同變量或標號作用於相同的存儲單元。

CS∶Code Segment,代碼段寄存器,存放當前運行的代碼段起始地址(高16位)。代碼段存放當前正在運行的程序。

CWD∶ 指令助記符——字轉換爲雙字。把AX中字節的符號擴展到DX中,若(AX)的最高有效位爲0 ,則(DX)=0000;若(AX)的最高有效位爲1, 則(DX)=0FFFFH。

CX∶Count, 通用寄存器。在循環和串處理指令中用作隱含的計數器。其中CH是高 8位,CL是低 8位。

DAA∶ 指令助記符——加法的十進制調整(壓縮的BCD碼)。 無操作數,調整 的加法結果在AL中。調整方法是,如果AL的低 4位大於9 或AF=1 ,則加 6 到AL並置AF=1 ;如果AL的高 4位大於 9或CF=1 ,則加60H 到AL,並 置CF=1 。

DAS∶ 指令助記符——減法的十進制調整(壓縮的BCD碼)。 調整方法是,若AF=1 或AL的低4位爲A—F,則(AL)減06H,且AF置 1;若CF=1 或AL的高 4位爲A—F,則(AL)減60H,且CF置1。

DB∶ 僞指令——定義字節。其後的每個操作數佔用一個字節。若是字符串, 必須用引號' '括起來,字符串不能超過 255個字符,字符串自左至右以 字符的ASCII碼按地址遞增的順序依次存放。

DD∶ 僞指令——定義雙字。其後的每個操作數佔用二個字(低字在前)。 DD還可以把其後的變量或標號的偏移地址和所在段首址存入存儲器內指定 的雙字單元(即DD前面的變量)中,第一個字中存放DD後的變量的偏移地址, 第二個字中存放該變量所在段的段首址。

DEC∶ 指令助記符——減1 。操作數可以是寄存器或存儲器單元,但不能是段 寄存器或立即數。

DF∶Direction Flag,方向標誌,在標誌寄存器的第 10字節,在串處理指令中控制處理信息的方向。DF爲1時是反向,每次操作後使SI和DI減量(這樣就使串處理從高地址向低地址方向處理);當DF爲0時是正向,使SI和DI增量。

DI∶Destination Index,目的變址寄存器。與ES聯用,用來確定數據段中某一存儲單元的偏移地址。在串處理指令中,DI指出目的操作數的地址,隱含段爲當前的附加段。

DIV∶ 指令助記符——無符號數除法。
  對於字節操作,16位被除數(若被除數爲 8位,需用符號擴展的方法 ,即用CBW 指令擴展到16位)放在AX中, 8位除數爲源操作數,相除結果 ,8位商在AL中,而 8位餘數在AH中。
  對於字操作,32位被除數(若被除數爲16位,用CWD 指令擴展到32位)放在DX和AX中,16位除數爲源操作數,相除結果,字(16位)商在AX中 ,字餘數在DX中。
  源操作數不能是立即操作數,指令執行後,源操作數的值不變。
  如果商超過目標寄存器能存放的最大數值時,系統產生0 類中斷。
  被除數若需要轉換爲雙精度值時,一定不能用符號擴展,而只能將高16位送0("MOV DX,0")。

DQ∶ 僞指令——定義四字。其後的每個操作數佔用四個字。

DS∶Data Segment,數據段寄存器。存放數據段的起始地址(高16位)。數據段存放當前運行程序所用的數據,如果程序中使用了串處理指令,則其源操作數也存放在數據段中。

DT∶ 僞指令——定義十字節。其後的每個操作數佔用十個字節。

DUP∶ 複製操作符。DUP 前面的常量或表達式的值(正整數)指明DUP 後面的括號中的操作數之重複次數。

DW∶ 僞指令——定義字。其後的每個操作數佔用一個字(低字節在前,高字節在後)。DW可以給兩個字符組成的字符串(用' '括起來) 分配兩個字節的存儲單元(前一個字符在高字節)。DW還可以把其後的變量或標號的偏移地址存入存儲器的指定單元(即DW前的變量)。

DX∶Data,通用寄存器。在作雙字長運算時,把DX和AX組合在一起存放一個雙字數,DX用來存放高位字。此外,對某些I/O 操作,DX可用來存放 I/O的端口地址。其中DH是高 8位,DL是低 8位。

EA∶ 教材符號----某一存儲單元的偏移地址,即該單元到它所在段首址的字節距離。

ELSE∶僞指令——條件。條件不滿足時彙編ELSE至ENDIF之間的程序塊。

END∶ 僞指令——程序模塊結束。主程序模塊結束,END 後要接標號(存儲器地址),指出程序開始執行的地址 。子程序不用。

ENDIF∶僞指令——條件(結尾)。

ENDM∶宏指令——①宏定義(結尾)。②重複塊(結尾)。

ENDP∶僞指令——過程(子程序)定義(結尾)。

ENDS∶僞指令——段定義或結構定義(結尾)。

ES∶Extra Segment,附加段寄存器。 用於存放附加段的起始地址(高16位)。附加段是一個輔助的數據區,也是串處理指令的目的操作數據存放區。

ESC∶指令助記符——交權給外部協處理器。是在大模式下使用的一條指令,它可以使外部協處理器從 8086/8088指令流中獲得一個操作碼和一個操作數,並使用8086/8088 的尋址方式。指令後的操作碼是一個 6位的立即數 ,其中 3位用來指明哪一個協處理器工作,另外 3位指明這個處理器執行什麼指令。隨後的源操作數若是寄存器,則8086/8088 直接將其內容放置在數據總線上;如果這個源操作數是存儲變量,則8086/8088 從存儲器中取出操作數並放到數據總線上,從而使外部協處理器可以獲取這個操作數,對它進行運算。

EQ∶ 關係運算符——相等。若滿足條件,輸出結果爲全1 (所有的位),否則爲全0 。

EQU∶ 等價僞指令 。格式爲"符號名 EQU 表達式". EQU可以把它前面的符號定義爲一個常量或一個能求出常數值的表達式,或定義爲別的符號名,甚至定義爲一條可執行的命令。不得重複定義。
  例一,"新變量名 EQU THIS DWORD",該語句將緊跟其後的變量重新定義爲雙字類,以新變量名命名。數據存儲區首址不變。
  例二,"新變量名 EQU WORD PTR 舊變量名",該語句將舊變量重新定義爲字類型,以新變量名命名。數據存儲區首址不變。

EVEN∶僞指令。它使此語句後面的程序或數據塊的起始地址爲偶數。

EXTRN∶僞指令——定義外部符號。格式是 EXTRN 符號名:類型 。表示本模塊中需要引用但卻是在其他模塊中定義說明爲PUBLIC的那些符號(符號常量、變量、標號以及過程名)。符號類型必須與他們在其他模塊定義時的符號類型保持一致。

FLAGS∶ 標誌寄存器(即PSW)。

GE∶ 關係運算符——大於等於。若滿足條件,輸出結果爲全 1 (所有的位),否則爲全0 。

GROUP∶ 僞指令——分組。把模塊中若干不同名的段集合成一個組,並賦予一個組名,使它們都裝在一個物理段中(64KB)。可以得到較緊湊的代碼,組內各段間的跳轉都可以看作是段內跳轉。
  格式是 組名 GROUP <段名1,段名2,……>

GT∶ 關係運算符——大於。若滿足條件,輸出結果爲全1 (所有的位),否則爲全0 。

H∶ 數據類型後綴,表示十六進制常量。

HIGH∶ 字節分解運算符(操作符)。用來從運算對象(一個數或地址表達式)中分離出(取)高字節。

HLT∶ 指令助記符——停機。該指令使處理器處於暫停狀態,該狀態可以由復位信號、非屏蔽中斷請求信號以及IF=1 情況下可屏蔽中斷信號清除。

IDIV∶指令助記符——帶符號數除法。  對於字節操作,16位被除數(若被除數爲 8位,需用符號擴展的方法,即用CBW 指令擴展到16位)放在AX中, 8位除數爲源操作數,相除結果,8位商在AL中,而 8位餘數在AH中。  對於字操作,32位被除數(若被除數爲16位,用CWD 指令擴展到32位)放在DX和AX中,16位除數爲源操作數,相除結果,字(16位)商在AX中,字餘數在DX中。  餘數的符號必須和被除數的符號相同。

IF∶Interrupt Flag,①中斷標誌, 在標誌寄存器的第9字節,當IF爲1時,允許中斷,即CPU響應外設的中斷請求。②僞指令——條件(表達式的值不等於0 爲真)。若條件成立,則彙編整個程序塊;但中間若有ELSE命令,則只彙編到ELSE;當條件不成立時,只彙編從ELSE到ENDIF 之間的程序塊。

IF1∶ 僞指令——條件(若是第一趟掃描,條件爲真)。

IF2∶ 僞指令——條件(若是第二趟掃描,條件爲真)。

IFB∶ 僞指令——條件(若其後的參數對應的實參存在,爲真)。

IFDEF∶ 僞指令——條件(若其後的符號已定義或被說明爲外部符號,則條件爲真)。

IFDIF∶僞指令——條件(若兩個字符串參數不相同,則條件爲真)。

IFE∶ 僞指令——條件(表達式的值等於0 時,條件爲真)。

IFIDN∶僞指令——條件(若兩個字符串參數相同,則條件爲真)。

IFNB∶僞指令——條件(若其後的參數對應的實參不存在,爲真)。

IFNDEF∶僞指令——條件(若其後的符號未定義或未被說明爲外部符號,則條件爲真)。

IMUL∶指令助記符——帶符號的整數乘法。  對於字節乘法,(AL)*(源操作數)---> AX;   對於字乘法, (AX)*(源操作數)---> AX和DX;   若結果的高半部分(AH或DX,對應字節和字)是低半部分的符號擴展,則CF=0,OF=0; 否則,CF=1,OF=1,表示在AH(對於字節)或DX(對於字)中包含結果的有效值。

IN∶指令助記符——輸入。允許把一個字或字節由輸入端口(port)傳送到AX或AL。端口地址可以用直接尋址(IN AL n),也可用DX間接尋址(IN AL,DX)。8 位地址直接尋址,可尋址256 個端口;DX間接尋址,可尋址64K個端口。

INC∶ 指令助記符——加1。 操作數可以是寄存器或存儲器單元,但不能是段寄存器或立即數。狀態標誌CF不受影響。

INCLUDE∶ 僞指令。當宏彙編程序彙編到INCLUDE僞指令時,立即打開INCLUDE指示的文件,並把它彙編到當前的源文件中去,直到該文件被彙編結束,彙編程序繼續彙編INCLUDE僞指令之後的語句。INCLUDE可以嵌套。

INT∶ 指令助記符——中斷調用。操作數是用戶定義的中斷類型,它可以實現256種不同的中斷。當指令執行時,首先將標誌寄存器內容進棧,清除IF和TF標誌並將當前CS內容進棧;然後將中斷類型乘以4 ,得到中斷向量地址;最後取中斷向量的第二個字送CS,將IP進棧,取中斷向量的第一個字送IP。由於CS:IP指向中斷服務程序,因此可以實現指定中斷類型的段間調用。

INTO∶指令助記符——溢出中斷。只有OF=1 時才進入溢出中斷(IF和TF被改爲0)。

IP∶Instruction Pointer,控制寄存器——指令指針寄存器。用來存放代碼段中指令的偏移地址。在程序運行的過程中,它始終指向下一條指令的首地址。它與CS聯用,確定下一條要執行的指令的物理地址。IP寄存器不能用於算術運算,也不能直接存取,但可以用控制轉移指令加以改變。

IRET∶指令助記符——中斷返回。執行該指令時,從棧中退出三個16位的值,分別送IP、CS和標誌寄存器。

IRP∶ 宏指令——重複塊(以ENDM結束)。IRP 形參,<實參1,實參2,…> 這種宏指令用於帶立即數的僞操作。實參是用戶指定的立即數,它的個數就是重複的次數,每重複一次,就用一個實參代替形參。

IRPC∶宏指令——重複塊(以ENDM結束)。IRPC 形參,字符串這種宏指令用於帶字符串的重複僞操作。重複次數由字符串中字符個數確定。每次重複,依次用字符串中的一個字符替代形參,直到字符替代完畢。

JA∶ 無符號數條件轉移指令助記符——(無符號數比較)高於轉移(等價JBE)。CF=0,且ZF=0 則轉移(段內直接短轉移)。

JAE∶ 無符號數條件轉移指令助記符——(無符號數比較)高於或等於轉移(等價JNB)。CF=0 , 或ZF=1 則轉移(段內直接短轉移)。

JB∶ 無符號數條件轉移指令助記符——(無符號數比較)低於轉移(等價JNAE)。CF=1, 且ZF=0 則轉移(段內直接短轉移)。

JBE∶ 無符號數條件轉移指令助記符——(無符號數比較)低於或等於轉移(等價JNA)。CF=1 或ZF=1 則轉移。

JC∶ 簡單條件轉移指令助記符——有進位轉移。CF=1 則轉移(段內直接短轉移,產生 8位的位移量,即轉移地址的偏移量在—128 到+127之間)。

JCXZ∶指令助記符——條件轉移。(CX)=0, 則轉移(段內直接短轉移?)。

JE∶ 簡單條件轉移指令助記符——(兩數比較)相等轉移(同JZ)。前次操作結果爲0,ZF=1則轉移(段內直接短轉移)。

JG∶有符號數條件轉移指令助記符——(有符號數比較)大於轉移(等價JNLE)。SF和OF同號,且ZF=0 時轉移。(段內直接短轉移)

JGE∶ 有符號數條件轉移指令助記符——(有符號數比較)大於或等於轉移(等價於JNL)。 當SF和OF同號,或ZF=1, 則轉移(段內直接短轉移)。

JL∶ 有符號數條件轉移指令助記符——(有符號數比較)小於轉移(等價於JNGE)。當SF和OF異號,且ZF=0 時轉移(段內直接短轉移)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章