x86匯編指令集大全(帶注釋)

匯編指令集太多,如果不用就會忘記,所以將i處理器官方的指令集大全寫到博客上,有需要的人可以參考一下!

---------- 一、數(shù)據(jù)傳輸指令 ----------------------------------------------------
它們在存貯器和寄存器、寄存器和輸入輸出端口之間傳送數(shù)據(jù).

1. 通用數(shù)據(jù)傳送指令

MOV     傳送字或字節(jié).  
MOVSX   先符號擴展,再傳送.  
MOVZX   先零擴展,再傳送.  
PUSH    把字壓入堆棧.  
POP     把字彈出堆棧.  
PUSHA   把AX,CX,DX,BX,SP,BP,SI,DI依次壓入堆棧.  
POPA    把DI,SI,BP,SP,BX,DX,CX,AX依次彈出堆棧.  
PUSHAD  把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次壓入堆棧.  
POPAD   把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次彈出堆棧.  
BSWAP   交換32位寄存器里字節(jié)的順序  
XCHG    交換字或字節(jié).(至少有一個操作數(shù)為寄存器,段寄存器不可作為操作數(shù))  
CMPXCHG 比較并交換操作數(shù).(第二個操作數(shù)必須為累加器AL/AX/EAX)  
XADD    先交換再累加.(結(jié)果在第一個操作數(shù)里)  
XLAT    字節(jié)查表轉(zhuǎn)換.----BX指向一張256字節(jié)的表的起點,AL為表的索引值(0-255,即0-FFH);返回AL為查表結(jié)果.([BX+AL]->AL)  

2. 輸入輸出端口傳送指令.

IN      I/O端口輸入. ( 語法: IN   累加器,    {端口號│DX} )  
OUT     I/O端口輸出. ( 語法: OUT {端口號│DX},累加器 )輸入輸出端口由立即方式指定時,    其范圍是 0-255; 由寄存器 DX 指定時,其范圍是    0-65535.  

3. 目的地址傳送指令.

LEA     裝入有效地址.例: LEA DX,string ;把偏移地址存到DX.  
LDS     傳送目標指針,把指針內(nèi)容裝入DS.例: LDS SI,string   ;把段地址:偏移地址存到DS:SI.  
LES     傳送目標指針,把指針內(nèi)容裝入ES.例: LES DI,string   ;把段地址:偏移地址存到ES:DI.  
LFS     傳送目標指針,把指針內(nèi)容裝入FS.例: LFS DI,string   ;把段地址:偏移地址存到FS:DI.  
LGS     傳送目標指針,把指針內(nèi)容裝入GS.例: LGS DI,string   ;把段地址:偏移地址存到GS:DI.  
LSS     傳送目標指針,把指針內(nèi)容裝入SS.例: LSS DI,string   ;把段地址:偏移地址存到SS:DI.  

4. 標志傳送指令.

LAHF    標志寄存器傳送,把標志裝入AH.  
SAHF    標志寄存器傳送,把AH內(nèi)容裝入標志寄存器.  
PUSHF   標志入棧.  
POPF    標志出棧.  
PUSHD   32位標志入棧.  
POPD    32位標志出棧.  

---------- 二、算術(shù)運算指令 ------------------------------------------

ADC     帶進位加法.  
INC     加 1.  
AAA     加法的ASCII碼調(diào)整.  
DAA     加法的十進制調(diào)整.  
SUB     減法.  
SBB     帶借位減法.  
DEC     減 1.  
NEG     求反(以    0 減之).  
CMP     比較.(兩操作數(shù)作減法,僅修改標志位,不回送結(jié)果).  
AAS     減法的ASCII碼調(diào)整.  
DAS     減法的十進制調(diào)整.  
MUL     無符號乘法.結(jié)果回送AH和AL(字節(jié)運算),或DX和AX(字運算),  
IMUL    整數(shù)乘法.結(jié)果回送AH和AL(字節(jié)運算),或DX和AX(字運算),  
AAM     乘法的ASCII碼調(diào)整.  
DIV     無符號除法.結(jié)果回送:商回送AL,余數(shù)回送AH, (字節(jié)運算);或 商回送AX,余數(shù)回送DX, (字運算).  
IDIV    整數(shù)除法.結(jié)果回送:商回送AL,余數(shù)回送AH, (字節(jié)運算);或 商回送AX,余數(shù)回送DX, (字運算).  
AAD     除法的ASCII碼調(diào)整.  
CBW     字節(jié)轉(zhuǎn)換為字. (把AL中字節(jié)的符號擴展到AH中去)  
CWD     字轉(zhuǎn)換為雙字. (把AX中的字的符號擴展到DX中去)  
CWDE    字轉(zhuǎn)換為雙字. (把AX中的字符號擴展到EAX中去)  
CDQ     雙字擴展. (把EAX中的字的符號擴展到EDX中去)  

---------- 三、邏輯運算指令 ------------------------------------

AND     與運算.  
OR      或運算.  
XOR     異或運算.  
NOT     取反.  
TEST    測試.(兩操作數(shù)作與運算,僅修改標志位,不回送結(jié)果).  
SHL     邏輯左移.  
SAL     算術(shù)左移.(=SHL)  
SHR     邏輯右移.  
SAR     算術(shù)右移.(=SHR)  
ROL     循環(huán)左移.  
ROR     循環(huán)右移.  
RCL     通過進位的循環(huán)左移.  
RCR     通過進位的循環(huán)右移.  
          以上八種移位指令,其移位次數(shù)可達255次.  
          移位一次時, 可直接用操作碼. 如 SHL AX,1.  
          移位>1次時, 則由寄存器CL給出移位次數(shù).  
          如 MOV CL,04   SHL AX,CL  

---------- 四、串指令 ---------------------------------------------

          DS:SI 源串段寄存器 :源串變址.  
          ES:DI 目標串段寄存器:目標串變址.  
          CX 重復(fù)次數(shù)計數(shù)器.  
          AL/AX 掃描值.  
          D標志   0表示重復(fù)操作中SI和DI應(yīng)自動增量; 1表示應(yīng)自動減量.  
          Z標志   用來控制掃描或比較操作的結(jié)束.  
MOVS    串傳送.( MOVSB 傳送字符. MOVSW 傳送字. MOVSD 傳送雙字. )  
CMPS    串比較.( CMPSB 比較字符. CMPSW 比較字. )  
SCAS    串掃描.把AL或AX的內(nèi)容與目標串作比較,比較結(jié)果反映在標志位.  
LODS    裝入串.把源串中的元素(字或字節(jié))逐一裝入AL或AX中.( LODSB 傳送字符. LODSW 傳送字.    LODSD 傳送雙字. )  
STOS    保存串.是LODS的逆過程.  
REP         當(dāng)CX/ECX<>0時重復(fù).  
REPE/REPZ   當(dāng)ZF=1或比較結(jié)果相等,且CX/ECX<>0時重復(fù).  
REPNE/REPNZ 當(dāng)ZF=0或比較結(jié)果不相等,且CX/ECX<>0時重復(fù).  
REPC        當(dāng)CF=1且CX/ECX<>0時重復(fù).  
REPNC       當(dāng)CF=0且CX/ECX<>0時重復(fù).  

---------- 五、程序轉(zhuǎn)移指令 -------------------------------

1. 無條件轉(zhuǎn)移指令 (長轉(zhuǎn)移)

JMP         無條件轉(zhuǎn)移指令  
CALL        過程調(diào)用  
RET/RETF    過程返回.  

2. 條件轉(zhuǎn)移指令 (短轉(zhuǎn)移,-128到+127的距離內(nèi))( 當(dāng)且僅當(dāng)(SF XOR OF)=1時,OP1<OP2 )

JA/JNBE     不小于或不等于時轉(zhuǎn)移.  
JAE/JNB     大于或等于轉(zhuǎn)移.  
JB/JNAE     小于轉(zhuǎn)移.  
JBE/JNA     小于或等于轉(zhuǎn)移.  
    以上四條,測試無符號整數(shù)運算的結(jié)果(標志C和Z).  
JG/JNLE     大于轉(zhuǎn)移.  
JGE/JNL     大于或等于轉(zhuǎn)移.  
JL/JNGE     小于轉(zhuǎn)移.  
JLE/JNG     小于或等于轉(zhuǎn)移.  
    以上四條,測試帶符號整數(shù)運算的結(jié)果(標志S,O和Z).  
JE/JZ       等于轉(zhuǎn)移.  
JNE/JNZ     不等于時轉(zhuǎn)移.  
JC          有進位時轉(zhuǎn)移.  
JNC         無進位時轉(zhuǎn)移.  
JNO         不溢出時轉(zhuǎn)移.  
JNP/JPO     奇偶性為奇數(shù)時轉(zhuǎn)移.  
JNS         符號位為 "0" 時轉(zhuǎn)移.  
JO          溢出轉(zhuǎn)移.  
JP/JPE      奇偶性為偶數(shù)時轉(zhuǎn)移.  
JS          符號位為 "1" 時轉(zhuǎn)移.  

3. 循環(huán)控制指令(短轉(zhuǎn)移)

LOOP            CX不為零時循環(huán).  
LOOPE/LOOPZ     CX不為零且標志Z=1時循環(huán).  
LOOPNE/LOOPNZ   CX不為零且標志Z=0時循環(huán).  
JCXZ            CX為零時轉(zhuǎn)移.  
JECXZ           ECX為零時轉(zhuǎn)移.  

4. 中斷指令

INT         中斷指令  
INTO        溢出中斷  
IRET        中斷返回  

5. 處理器控制指令

HLT         處理器暫停,  直到出現(xiàn)中斷或復(fù)位信號才繼續(xù).  
WAIT        當(dāng)芯片引線TEST為高電平時使CPU進入等待狀態(tài).  
ESC         轉(zhuǎn)換到外處理器.  
LOCK        封鎖總線.  
NOP         空操作.  
STC         置進位標志位.  
CLC         清進位標志位.  
CMC         進位標志取反.  
STD         置方向標志位.  
CLD         清方向標志位.  
STI         置中斷允許位.  
CLI         清中斷允許位.  

---------- 六、偽指令 ------------------------------------

DW          定義字(2字節(jié)).  
PROC        定義過程.  
ENDP        過程結(jié)束.  
SEGMENT     定義段.  
ASSUME      建立段寄存器尋址.  
ENDS        段結(jié)束.  
END         程序結(jié)束.  

---------- 七、處理機控制指令:標志處理指令 -----------

CLC     進位位置0指令  
CMC     進位位求反指令  
STC     進位位置為1指令  
CLD     方向標志置1指令  
STD     方向標志位置1指令  
CLI     中斷標志置0指令  
STI     中斷標志置1指令  
NOP     無操作  
HLT     停機  
WAIT    等待  
ESC     換碼  
LOCK    封鎖  

========== 浮點運算指令集 =========

一、控制指令(帶9B的控制指令前綴F變?yōu)镕N時浮點不檢查,機器碼去掉9B)----

FINIT                 初始化浮點部件                  機器碼  9B DB E3  
FCLEX                 清除異常                         機器碼  9B DB E2  
FDISI                 浮點檢查禁止中斷                 機器碼  9B DB E1  
FENI                  浮點檢查禁止中斷二            機器碼  9B DB E0  
WAIT                  同步CPU和FPU                    機器碼  9B  
FWAIT                 同步CPU和FPU                    機器碼  D9 D0  
FNOP                  無操作                          機器碼  DA E9  
FXCH                  交換ST(0)和ST(1)                機器碼  D9 C9  
FXCH ST(i)            交換ST(0)和ST(i)                機器碼  D9 C1iii  
FSTSW ax              狀態(tài)字到ax                       機器碼  9B DF E0  
FSTSW   word ptr mem  狀態(tài)字到mem                      機器碼  9B DD mm111mmm  
FLDCW   word ptr mem  mem到狀態(tài)字                      機器碼  D9 mm101mmm  
FSTCW   word ptr mem  控制字到mem                      機器碼  9B D9 mm111mmm  
  
FLDENV  word ptr mem  mem到全環(huán)境                      機器碼  D9 mm100mmm  
FSTENV  word ptr mem  全環(huán)境到mem                      機器碼  9B D9 mm110mmm  
FRSTOR  word ptr mem  mem到FPU狀態(tài)                    機器碼  DD mm100mmm  
FSAVE   word ptr mem  FPU狀態(tài)到mem                    機器碼  9B DD mm110mmm  
  
FFREE ST(i)           標志ST(i)未使用                   機器碼  DD C0iii  
FDECSTP               減少棧指針1->0 2->1             機器碼  D9 F6  
FINCSTP               增加棧指針0->1 1->2             機器碼  D9 F7  
FSETPM                浮點設(shè)置保護                       機器碼  DB E4  

---------- 二、數(shù)據(jù)傳送指令 -----------------------------------------

FLDZ                  將0.0裝入ST(0)                  機器碼  D9 EE  
FLD1                  將1.0裝入ST(0)                  機器碼  D9 E8  
FLDPI                 將π裝入ST(0)                    機器碼  D9 EB  
FLDL2T                將ln10/ln2裝入ST(0)             機器碼  D9 E9  
FLDL2E                將1/ln2裝入ST(0)                機器碼  D9 EA  
FLDLG2                將ln2/ln10裝入ST(0)             機器碼  D9 EC  
FLDLN2                將ln2裝入ST(0)                  機器碼  D9 ED  
  
FLD    real4 ptr mem  裝入mem的單精度浮點數(shù)             機器碼  D9 mm000mmm  
FLD    real8 ptr mem  裝入mem的雙精度浮點數(shù)             機器碼  DD mm000mmm  
FLD   real10 ptr mem  裝入mem的十字節(jié)浮點數(shù)             機器碼  DB mm101mmm  
  
FILD    word ptr mem  裝入mem的二字節(jié)整數(shù)              機器碼  DF mm000mmm  
FILD   dword ptr mem  裝入mem的四字節(jié)整數(shù)              機器碼  DB mm000mmm  
FILD   qword ptr mem  裝入mem的八字節(jié)整數(shù)              機器碼  DF mm101mmm  
  
FBLD   tbyte ptr mem  裝入mem的十字節(jié)BCD數(shù)            機器碼  DF mm100mmm  
  
FST    real4 ptr mem  保存單精度浮點數(shù)到mem             機器碼  D9 mm010mmm  
FST    real8 ptr mem  保存雙精度浮點數(shù)到mem             機器碼  DD mm010mmm  
  
FIST    word ptr mem  保存二字節(jié)整數(shù)到mem              機器碼  DF mm010mmm  
FIST   dword ptr mem  保存四字節(jié)整數(shù)到mem              機器碼  DB mm010mmm  
  
FSTP   real4 ptr mem  保存單精度浮點數(shù)到mem并出棧      機器碼  D9 mm011mmm  
FSTP   real8 ptr mem  保存雙精度浮點數(shù)到mem并出棧      機器碼  DD mm011mmm  
FSTP  real10 ptr mem  保存十字節(jié)浮點數(shù)到mem并出棧      機器碼  DB mm111mmm  
  
FISTP   word ptr mem  保存二字節(jié)整數(shù)到mem并出棧           機器碼  DF mm011mmm  
FISTP  dword ptr mem  保存四字節(jié)整數(shù)到mem并出棧           機器碼  DB mm011mmm  
FISTP  qword ptr mem  保存八字節(jié)整數(shù)到mem并出棧           機器碼  DF mm111mmm  
  
FBSTP  tbyte ptr mem  保存十字節(jié)BCD數(shù)到mem并出棧     機器碼  DF mm110mmm  
  
FCMOVB                ST(0),ST(i) <時傳送              機器碼  DA C0iii  
FCMOVBE               ST(0),ST(i) <=時傳送             機器碼  DA D0iii  
FCMOVE                ST(0),ST(i) =時傳送             機器碼  DA C1iii  
FCMOVNB               ST(0),ST(i) >=時傳送             機器碼  DB C0iii  
FCMOVNBE              ST(0),ST(i) >時傳送              機器碼  DB D0iii  
FCMOVNE               ST(0),ST(i) !=時傳送            機器碼  DB C1iii  
FCMOVNU               ST(0),ST(i) 有序時傳送        機器碼  DB D1iii  
FCMOVU                ST(0),ST(i) 無序時傳送        機器碼  DA D1iii  

---------- 三、比較指令 -----------------------------------------

FCOM                  ST(0)-ST(1)                      機器碼  D8 D1  
FCOMI                 ST(0),ST(i)  ST(0)-ST(1)         機器碼  DB F0iii  
FCOMIP                ST(0),ST(i)  ST(0)-ST(1)并出棧   機器碼  DF F0iii  
FCOM   real4 ptr mem  ST(0)-實數(shù)mem                      機器碼  D8 mm010mmm  
FCOM   real8 ptr mem  ST(0)-實數(shù)mem                      機器碼  DC mm010mmm  
  
FICOM   word ptr mem  ST(0)-整數(shù)mem                      機器碼  DE mm010mmm  
FICOM  dword ptr mem  ST(0)-整數(shù)mem                      機器碼  DA mm010mmm  
FICOMP  word ptr mem  ST(0)-整數(shù)mem并出棧               機器碼  DE mm011mmm  
FICOMP dword ptr mem  ST(0)-整數(shù)mem并出棧               機器碼  DA mm011mmm  
  
FTST                  ST(0)-0                          機器碼  D9 E4  
FUCOM  ST(i)          ST(0)-ST(i)                      機器碼  DD E0iii  
FUCOMP ST(i)          ST(0)-ST(i)并出棧                   機器碼  DD E1iii  
FUCOMPP               ST(0)-ST(1)并二次出棧             機器碼  DA E9  
FXAM                  ST(0)規(guī)格類型                    機器碼  D9 E5  

---------- 四、運算指令 --------------------------------------

FADD                  把目的操作數(shù) (直接接在指令后的變量或堆棧緩存器) 與來源操作數(shù) (接在目的操作數(shù)后的變量或堆棧緩存器)  相加,并將結(jié)果存入目的操作數(shù)  
FADDP  ST(i),ST       這個指令是使目的操作數(shù)加上 ST  緩存器,并彈出 ST 緩存器,而目的操作數(shù)必須是堆棧緩存器的其中之一,最后不管目的操作數(shù)為何,經(jīng)彈出一次后,目的操作數(shù)會變成上一個堆棧緩存器了  
FIADD                 FIADD 是把 ST   加上來源操作數(shù),然后再存入 ST 緩存器,來源操作數(shù)必須是字組整數(shù)或短整數(shù)形態(tài)的變數(shù)  
  
FSUB                  減  
FSUBP  
FSUBR                 減數(shù)與被減數(shù)互換  
FSUBRP  
FISUB  
FISUBR  
  
FMUL                  乘  
FMULP  
FIMUL  
  
FDIV                  除  
FDIVP  
FDIVR  
FDIVRP  
FIDIV  
FIDIVR  
  
FCHS                  改變 ST 的正負值  
  
FABS                  把 ST  之值取出,取其絕對值后再存回去。  
  
FSQRT                 將 ST  之值取出,開根號后再存回去。  
  
FSCALE                這個指令是計算 ST*2^ST(1)之值,再把結(jié)果存入 ST 里而 ST(1)   之值不變。ST(1)  必須是在 -32768 到 32768 (-215 到 215 )之間的整數(shù),如果超過這個范圍計算結(jié)果無法確定,如果不是整數(shù) ST(1)    會先向零舍入成整數(shù)再計算。所以為安全起見,最好是由字組整數(shù)載入到 ST(1) 里。  
  
FRNDINT               這個指令是把 ST 的數(shù)值舍入成整數(shù),F(xiàn)PU    提供四種舍入方式,由 FPU 的控制字組(control    word)中的 RC 兩個位決定  
                          RC    舍入控制  
                          00    四舍五入  
                          01    向負無限大舍入  
                          10    向正無限大舍入  
                          11    向零舍去  
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 閱讀經(jīng)典——《深入理解計算機系統(tǒng)》06 本文,我們要做一件大膽的事情,從零開始實現(xiàn)一個全新的指令集架構(gòu),以此深入理...
    金戈大王閱讀 21,139評論 9 54
  • 計算機通過執(zhí)行指令序列來使機器得以工作,所以對于每一系列的計算機都有指定的一組指令集供計算機使用,這組指令...
    未來科技工作室閱讀 8,344評論 1 10
  • 指令系統(tǒng) 程序功能:求兩個數(shù)據(jù)之和并輸出 運行結(jié)果:sum is 25 基本概念: 指令:是計算機硬件能夠直接理解...
    我可能是個假開發(fā)閱讀 5,280評論 0 5
  • 1.地址總線,數(shù)據(jù)總線,控制總線在哪里,它們有什么作用?答:它們都是cpu連接外部組件的線路。地址總線:地址總線A...
    MagicalGuy閱讀 1,672評論 0 1
  • 計算機系統(tǒng)漫游 代碼從文本到可執(zhí)行文件的過程(c語言示例):預(yù)處理階段,處理 #inlcude , #defin...
    willdimagine閱讀 3,833評論 0 5

友情鏈接更多精彩內(nèi)容