x86汇编指令大全
X86和X87匯編指令大全(有注釋) ?
---------- 一、數(shù)據(jù)傳輸指令 ---------------------------------------------------- ?
它們?cè)诖尜A器和寄存器、寄存器和輸入輸出端口之間傳送數(shù)據(jù). ?
1. 通用數(shù)據(jù)傳送指令. ?
? ? MOV ? ? 傳送字或字節(jié). ?
? ? MOVSX ? 先符號(hào)擴(kuò)展,再傳送. ?
? ? MOVZX ? 先零擴(kuò)展,再傳送. ?
? ? 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é).(至少有一個(gè)操作數(shù)為寄存器,段寄存器不可作為操作數(shù)) ?
? ? CMPXCHG 比較并交換操作數(shù).(第二個(gè)操作數(shù)必須為累加器AL/AX/EAX) ?
? ? XADD ? ?先交換再累加.(結(jié)果在第一個(gè)操作數(shù)里) ?
? ? XLAT ? ?字節(jié)查表轉(zhuǎn)換.----BX指向一張256字節(jié)的表的起點(diǎn),AL為表的索引值(0-255,即0-FFH);返回AL為查表結(jié)果.([BX+AL]->AL) ?
2. 輸入輸出端口傳送指令. ?
? ? IN ? ? ?I/O端口輸入. ( 語(yǔ)法: IN ? 累加器, ? ?{端口號(hào)│DX} ) ?
? ? OUT ? ? I/O端口輸出. ( 語(yǔ)法: OUT {端口號(hào)│DX},累加器 )輸入輸出端口由立即方式指定時(shí), ? ?其范圍是 0-255; 由寄存器 DX 指定時(shí),其范圍是 ? ?0-65535. ?
3. 目的地址傳送指令. ?
? ? LEA ? ? 裝入有效地址.例: LEA DX,string ;把偏移地址存到DX. ?
? ? LDS ? ? 傳送目標(biāo)指針,把指針內(nèi)容裝入DS.例: LDS SI,string ? ;把段地址:偏移地址存到DS:SI. ?
? ? LES ? ? 傳送目標(biāo)指針,把指針內(nèi)容裝入ES.例: LES DI,string ? ;把段地址:偏移地址存到ES:DI. ?
? ? LFS ? ? 傳送目標(biāo)指針,把指針內(nèi)容裝入FS.例: LFS DI,string ? ;把段地址:偏移地址存到FS:DI. ?
? ? LGS ? ? 傳送目標(biāo)指針,把指針內(nèi)容裝入GS.例: LGS DI,string ? ;把段地址:偏移地址存到GS:DI. ?
? ? LSS ? ? 傳送目標(biāo)指針,把指針內(nèi)容裝入SS.例: LSS DI,string ? ;把段地址:偏移地址存到SS:DI. ?
4. 標(biāo)志傳送指令. ?
? ? LAHF ? ?標(biāo)志寄存器傳送,把標(biāo)志裝入AH. ?
? ? SAHF ? ?標(biāo)志寄存器傳送,把AH內(nèi)容裝入標(biāo)志寄存器. ?
? ? PUSHF ? 標(biāo)志入棧. ?
? ? POPF ? ?標(biāo)志出棧. ?
? ? PUSHD ? 32位標(biāo)志入棧. ?
? ? POPD ? ?32位標(biāo)志出棧. ?
---------- 二、算術(shù)運(yùn)算指令 ---------------------------------------------------- ?
? ? ADD ? ? 加法. ?
? ? ADC ? ? 帶進(jìn)位加法. ?
? ? INC ? ? 加 1. ?
? ? AAA ? ? 加法的ASCII碼調(diào)整. ?
? ? DAA ? ? 加法的十進(jìn)制調(diào)整. ?
? ? SUB ? ? 減法. ?
? ? SBB ? ? 帶借位減法. ?
? ? DEC ? ? 減 1. ?
? ? NEG ? ? 求反(以 ? ?0 減之). ?
? ? CMP ? ? 比較.(兩操作數(shù)作減法,僅修改標(biāo)志位,不回送結(jié)果). ?
? ? AAS ? ? 減法的ASCII碼調(diào)整. ?
? ? DAS ? ? 減法的十進(jìn)制調(diào)整. ?
? ? MUL ? ? 無(wú)符號(hào)乘法.結(jié)果回送AH和AL(字節(jié)運(yùn)算),或DX和AX(字運(yùn)算), ?
? ? IMUL ? ?整數(shù)乘法.結(jié)果回送AH和AL(字節(jié)運(yùn)算),或DX和AX(字運(yùn)算), ?
? ? AAM ? ? 乘法的ASCII碼調(diào)整. ?
? ? DIV ? ? 無(wú)符號(hào)除法.結(jié)果回送:商回送AL,余數(shù)回送AH, (字節(jié)運(yùn)算);或 商回送AX,余數(shù)回送DX, (字運(yùn)算). ?
? ? IDIV ? ?整數(shù)除法.結(jié)果回送:商回送AL,余數(shù)回送AH, (字節(jié)運(yùn)算);或 商回送AX,余數(shù)回送DX, (字運(yùn)算). ?
? ? AAD ? ? 除法的ASCII碼調(diào)整. ?
? ? CBW ? ? 字節(jié)轉(zhuǎn)換為字. (把AL中字節(jié)的符號(hào)擴(kuò)展到AH中去) ?
? ? CWD ? ? 字轉(zhuǎn)換為雙字. (把AX中的字的符號(hào)擴(kuò)展到DX中去) ?
? ? CWDE ? ?字轉(zhuǎn)換為雙字. (把AX中的字符號(hào)擴(kuò)展到EAX中去) ?
? ? CDQ ? ? 雙字?jǐn)U展. (把EAX中的字的符號(hào)擴(kuò)展到EDX中去) ?
---------- 三、邏輯運(yùn)算指令 ---------------------------------------------------- ?
? ? AND ? ? 與運(yùn)算. ?
? ? OR ? ? ?或運(yùn)算. ?
? ? XOR ? ? 異或運(yùn)算. ?
? ? NOT ? ? 取反. ?
? ? TEST ? ?測(cè)試.(兩操作數(shù)作與運(yùn)算,僅修改標(biāo)志位,不回送結(jié)果). ?
? ? SHL ? ? 邏輯左移. ?
? ? SAL ? ? 算術(shù)左移.(=SHL) ?
? ? SHR ? ? 邏輯右移. ?
? ? SAR ? ? 算術(shù)右移.(=SHR) ?
? ? ROL ? ? 循環(huán)左移. ?
? ? ROR ? ? 循環(huán)右移. ?
? ? RCL ? ? 通過進(jìn)位的循環(huán)左移. ?
? ? RCR ? ? 通過進(jìn)位的循環(huán)右移. ?
? ? ? ? ? ? ? 以上八種移位指令,其移位次數(shù)可達(dá)255次. ?
? ? ? ? ? ? ? 移位一次時(shí), 可直接用操作碼. 如 SHL AX,1. ?
? ? ? ? ? ? ? 移位>1次時(shí), 則由寄存器CL給出移位次數(shù). ?
? ? ? ? ? ? ? 如 MOV CL,04 ? SHL AX,CL ?
---------- 四、串指令 ---------------------------------------------------------- ?
? ? ? ? ? ? ? DS:SI 源串段寄存器 :源串變址. ?
? ? ? ? ? ? ? ES:DI 目標(biāo)串段寄存器:目標(biāo)串變址. ?
? ? ? ? ? ? ? CX 重復(fù)次數(shù)計(jì)數(shù)器. ?
? ? ? ? ? ? ? AL/AX 掃描值. ?
? ? ? ? ? ? ? D標(biāo)志 ? 0表示重復(fù)操作中SI和DI應(yīng)自動(dòng)增量; 1表示應(yīng)自動(dòng)減量. ?
? ? ? ? ? ? ? Z標(biāo)志 ? 用來(lái)控制掃描或比較操作的結(jié)束. ?
? ? MOVS ? ?串傳送.( MOVSB 傳送字符. MOVSW 傳送字. MOVSD 傳送雙字. ) ?
? ? CMPS ? ?串比較.( CMPSB 比較字符. CMPSW 比較字. ) ?
? ? SCAS ? ?串掃描.把AL或AX的內(nèi)容與目標(biāo)串作比較,比較結(jié)果反映在標(biāo)志位. ?
? ? LODS ? ?裝入串.把源串中的元素(字或字節(jié))逐一裝入AL或AX中.( LODSB 傳送字符. LODSW 傳送字. ? ?LODSD 傳送雙字. ) ?
? ? STOS ? ?保存串.是LODS的逆過程. ?
? ? REP ? ? ? ? 當(dāng)CX/ECX<>0時(shí)重復(fù). ?
? ? REPE/REPZ ? 當(dāng)ZF=1或比較結(jié)果相等,且CX/ECX<>0時(shí)重復(fù). ?
? ? REPNE/REPNZ 當(dāng)ZF=0或比較結(jié)果不相等,且CX/ECX<>0時(shí)重復(fù). ?
? ? REPC ? ? ? ?當(dāng)CF=1且CX/ECX<>0時(shí)重復(fù). ?
? ? REPNC ? ? ? 當(dāng)CF=0且CX/ECX<>0時(shí)重復(fù). ?
---------- 五、程序轉(zhuǎn)移指令 ---------------------------------------------------- ?
1. 無(wú)條件轉(zhuǎn)移指令 (長(zhǎng)轉(zhuǎn)移) ?
? ? JMP ? ? ? ? 無(wú)條件轉(zhuǎn)移指令 ?
? ? CALL ? ? ? ?過程調(diào)用 ?
? ? RET/RETF ? ?過程返回. ?
2. 條件轉(zhuǎn)移指令 ? (短轉(zhuǎn)移,-128到+127的距離內(nèi))( 當(dāng)且僅當(dāng)(SF XOR OF)=1時(shí),OP1<OP2 ) ?
? ? JA/JNBE ? ? 不小于或不等于時(shí)轉(zhuǎn)移. ?
? ? JAE/JNB ? ? 大于或等于轉(zhuǎn)移. ?
? ? JB/JNAE ? ? 小于轉(zhuǎn)移. ?
? ? JBE/JNA ? ? 小于或等于轉(zhuǎn)移. ?
? ? ? ? 以上四條,測(cè)試無(wú)符號(hào)整數(shù)運(yùn)算的結(jié)果(標(biāo)志C和Z). ?
? ? JG/JNLE ? ? 大于轉(zhuǎn)移. ?
? ? JGE/JNL ? ? 大于或等于轉(zhuǎn)移. ?
? ? JL/JNGE ? ? 小于轉(zhuǎn)移. ?
? ? JLE/JNG ? ? 小于或等于轉(zhuǎn)移. ?
? ? ? ? 以上四條,測(cè)試帶符號(hào)整數(shù)運(yùn)算的結(jié)果(標(biāo)志S,O和Z). ?
? ? JE/JZ ? ? ? 等于轉(zhuǎn)移. ?
? ? JNE/JNZ ? ? 不等于時(shí)轉(zhuǎn)移. ?
? ? JC ? ? ? ? ?有進(jìn)位時(shí)轉(zhuǎn)移. ?
? ? JNC ? ? ? ? 無(wú)進(jìn)位時(shí)轉(zhuǎn)移. ?
? ? JNO ? ? ? ? 不溢出時(shí)轉(zhuǎn)移. ?
? ? JNP/JPO ? ? 奇偶性為奇數(shù)時(shí)轉(zhuǎn)移. ?
? ? JNS ? ? ? ? 符號(hào)位為 "0" 時(shí)轉(zhuǎn)移. ?
? ? JO ? ? ? ? ?溢出轉(zhuǎn)移. ?
? ? JP/JPE ? ? ?奇偶性為偶數(shù)時(shí)轉(zhuǎn)移. ?
? ? JS ? ? ? ? ?符號(hào)位為 "1" 時(shí)轉(zhuǎn)移. ?
3. 循環(huán)控制指令(短轉(zhuǎn)移) ?
? ? LOOP ? ? ? ? ? ?CX不為零時(shí)循環(huán). ?
? ? LOOPE/LOOPZ ? ? CX不為零且標(biāo)志Z=1時(shí)循環(huán). ?
? ? LOOPNE/LOOPNZ ? CX不為零且標(biāo)志Z=0時(shí)循環(huán). ?
? ? JCXZ ? ? ? ? ? ?CX為零時(shí)轉(zhuǎn)移. ?
? ? JECXZ ? ? ? ? ? ECX為零時(shí)轉(zhuǎn)移. ?
4. 中斷指令 ?
? ? INT ? ? ? ? 中斷指令 ?
? ? INTO ? ? ? ?溢出中斷 ?
? ? IRET ? ? ? ?中斷返回 ?
5. 處理器控制指令 ?
? ? HLT ? ? ? ? 處理器暫停, ?直到出現(xiàn)中斷或復(fù)位信號(hào)才繼續(xù). ?
? ? WAIT ? ? ? ?當(dāng)芯片引線TEST為高電平時(shí)使CPU進(jìn)入等待狀態(tài). ?
? ? ESC ? ? ? ? 轉(zhuǎn)換到外處理器. ?
? ? LOCK ? ? ? ?封鎖總線. ?
? ? NOP ? ? ? ? 空操作. ?
? ? STC ? ? ? ? 置進(jìn)位標(biāo)志位. ?
? ? CLC ? ? ? ? 清進(jìn)位標(biāo)志位. ?
? ? CMC ? ? ? ? 進(jìn)位標(biāo)志取反. ?
? ? STD ? ? ? ? 置方向標(biāo)志位. ?
? ? CLD ? ? ? ? 清方向標(biāo)志位. ?
? ? STI ? ? ? ? 置中斷允許位. ?
? ? CLI ? ? ? ? 清中斷允許位. ?
---------- 六、偽指令 ---------------------------------------------------------- ?
? ? DW ? ? ? ? ?定義字(2字節(jié)). ?
? ? PROC ? ? ? ?定義過程. ?
? ? ENDP ? ? ? ?過程結(jié)束. ?
? ? SEGMENT ? ? 定義段. ?
? ? ASSUME ? ? ?建立段寄存器尋址. ?
? ? ENDS ? ? ? ?段結(jié)束. ?
? ? END ? ? ? ? 程序結(jié)束. ?
---------- 七、處理機(jī)控制指令:標(biāo)志處理指令 ------------------------------------ ?
? ? CLC ? ? 進(jìn)位位置0指令 ?
? ? CMC ? ? 進(jìn)位位求反指令 ?
? ? STC ? ? 進(jìn)位位置為1指令 ?
? ? CLD ? ? 方向標(biāo)志置1指令 ?
? ? STD ? ? 方向標(biāo)志位置1指令 ?
? ? CLI ? ? 中斷標(biāo)志置0指令 ?
? ? STI ? ? 中斷標(biāo)志置1指令 ?
? ? NOP ? ? 無(wú)操作 ?
? ? HLT ? ? 停機(jī) ?
? ? WAIT ? ?等待 ?
? ? ESC ? ? 換碼 ?
? ? LOCK ? ?封鎖 ?
========== 浮點(diǎn)運(yùn)算指令集 ====================================================== ?
---------- 一、控制指令(帶9B的控制指令前綴F變?yōu)镕N時(shí)浮點(diǎn)不檢查,機(jī)器碼去掉9B)---- ?
FINIT ? ? ? ? ? ? ? ? 初始化浮點(diǎn)部件 ? ? ? ? ? ? ? ? ?機(jī)器碼 ?9B DB E3 ?
FCLEX ? ? ? ? ? ? ? ? 清除異常 ? ? ? ? ? ? ? ? ? ? ? ? 機(jī)器碼 ?9B DB E2 ?
FDISI ? ? ? ? ? ? ? ? 浮點(diǎn)檢查禁止中斷 ? ? ? ? ? ? ? ? 機(jī)器碼 ?9B DB E1 ?
FENI ? ? ? ? ? ? ? ? ?浮點(diǎn)檢查禁止中斷二 ? ? ? ? ? ?機(jī)器碼 ?9B DB E0 ?
WAIT ? ? ? ? ? ? ? ? ?同步CPU和FPU ? ? ? ? ? ? ? ? ? ?機(jī)器碼 ?9B ?
FWAIT ? ? ? ? ? ? ? ? 同步CPU和FPU ? ? ? ? ? ? ? ? ? ?機(jī)器碼 ?D9 D0 ?
FNOP ? ? ? ? ? ? ? ? ?無(wú)操作 ? ? ? ? ? ? ? ? ? ? ? ? ?機(jī)器碼 ?DA E9 ?
FXCH ? ? ? ? ? ? ? ? ?交換ST(0)和ST(1) ? ? ? ? ? ? ? ?機(jī)器碼 ?D9 C9 ?
FXCH ST(i) ? ? ? ? ? ?交換ST(0)和ST(i) ? ? ? ? ? ? ? ?機(jī)器碼 ?D9 C1iii ?
FSTSW ax ? ? ? ? ? ? ?狀態(tài)字到ax ? ? ? ? ? ? ? ? ? ? ? 機(jī)器碼 ?9B DF E0 ?
FSTSW ? word ptr mem ?狀態(tài)字到mem ? ? ? ? ? ? ? ? ? ? ?機(jī)器碼 ?9B DD mm111mmm ?
FLDCW ? word ptr mem ?mem到狀態(tài)字 ? ? ? ? ? ? ? ? ? ? ?機(jī)器碼 ?D9 mm101mmm ?
FSTCW ? word ptr mem ?控制字到mem ? ? ? ? ? ? ? ? ? ? ?機(jī)器碼 ?9B D9 mm111mmm ?
??
FLDENV ?word ptr mem ?mem到全環(huán)境 ? ? ? ? ? ? ? ? ? ? ?機(jī)器碼 ?D9 mm100mmm ?
FSTENV ?word ptr mem ?全環(huán)境到mem ? ? ? ? ? ? ? ? ? ? ?機(jī)器碼 ?9B D9 mm110mmm ?
FRSTOR ?word ptr mem ?mem到FPU狀態(tài) ? ? ? ? ? ? ? ? ? ?機(jī)器碼 ?DD mm100mmm ?
FSAVE ? word ptr mem ?FPU狀態(tài)到mem ? ? ? ? ? ? ? ? ? ?機(jī)器碼 ?9B DD mm110mmm ?
??
FFREE ST(i) ? ? ? ? ? 標(biāo)志ST(i)未使用 ? ? ? ? ? ? ? ? ? 機(jī)器碼 ?DD C0iii ?
FDECSTP ? ? ? ? ? ? ? 減少棧指針1->0 2->1 ? ? ? ? ? ? 機(jī)器碼 ?D9 F6 ?
FINCSTP ? ? ? ? ? ? ? 增加棧指針0->1 1->2 ? ? ? ? ? ? 機(jī)器碼 ?D9 F7 ?
FSETPM ? ? ? ? ? ? ? ?浮點(diǎn)設(shè)置保護(hù) ? ? ? ? ? ? ? ? ? ? ? 機(jī)器碼 ?DB E4 ?
---------- 二、數(shù)據(jù)傳送指令 ---------------------------------------------------- ?
FLDZ ? ? ? ? ? ? ? ? ?將0.0裝入ST(0) ? ? ? ? ? ? ? ? ?機(jī)器碼 ?D9 EE ?
FLD1 ? ? ? ? ? ? ? ? ?將1.0裝入ST(0) ? ? ? ? ? ? ? ? ?機(jī)器碼 ?D9 E8 ?
FLDPI ? ? ? ? ? ? ? ? 將π裝入ST(0) ? ? ? ? ? ? ? ? ? ?機(jī)器碼 ?D9 EB ?
FLDL2T ? ? ? ? ? ? ? ?將ln10/ln2裝入ST(0) ? ? ? ? ? ? 機(jī)器碼 ?D9 E9 ?
FLDL2E ? ? ? ? ? ? ? ?將1/ln2裝入ST(0) ? ? ? ? ? ? ? ?機(jī)器碼 ?D9 EA ?
FLDLG2 ? ? ? ? ? ? ? ?將ln2/ln10裝入ST(0) ? ? ? ? ? ? 機(jī)器碼 ?D9 EC ?
FLDLN2 ? ? ? ? ? ? ? ?將ln2裝入ST(0) ? ? ? ? ? ? ? ? ?機(jī)器碼 ?D9 ED ?
??
FLD ? ?real4 ptr mem ?裝入mem的單精度浮點(diǎn)數(shù) ? ? ? ? ? ? 機(jī)器碼 ?D9 mm000mmm ?
FLD ? ?real8 ptr mem ?裝入mem的雙精度浮點(diǎn)數(shù) ? ? ? ? ? ? 機(jī)器碼 ?DD mm000mmm ?
FLD ? real10 ptr mem ?裝入mem的十字節(jié)浮點(diǎn)數(shù) ? ? ? ? ? ? 機(jī)器碼 ?DB mm101mmm ?
??
FILD ? ?word ptr mem ?裝入mem的二字節(jié)整數(shù) ? ? ? ? ? ? ?機(jī)器碼 ?DF mm000mmm ?
FILD ? dword ptr mem ?裝入mem的四字節(jié)整數(shù) ? ? ? ? ? ? ?機(jī)器碼 ?DB mm000mmm ?
FILD ? qword ptr mem ?裝入mem的八字節(jié)整數(shù) ? ? ? ? ? ? ?機(jī)器碼 ?DF mm101mmm ?
??
FBLD ? tbyte ptr mem ?裝入mem的十字節(jié)BCD數(shù) ? ? ? ? ? ?機(jī)器碼 ?DF mm100mmm ?
??
FST ? ?real4 ptr mem ?保存單精度浮點(diǎn)數(shù)到mem ? ? ? ? ? ? 機(jī)器碼 ?D9 mm010mmm ?
FST ? ?real8 ptr mem ?保存雙精度浮點(diǎn)數(shù)到mem ? ? ? ? ? ? 機(jī)器碼 ?DD mm010mmm ?
??
FIST ? ?word ptr mem ?保存二字節(jié)整數(shù)到mem ? ? ? ? ? ? ?機(jī)器碼 ?DF mm010mmm ?
FIST ? dword ptr mem ?保存四字節(jié)整數(shù)到mem ? ? ? ? ? ? ?機(jī)器碼 ?DB mm010mmm ?
??
FSTP ? real4 ptr mem ?保存單精度浮點(diǎn)數(shù)到mem并出棧 ? ? ?機(jī)器碼 ?D9 mm011mmm ?
FSTP ? real8 ptr mem ?保存雙精度浮點(diǎn)數(shù)到mem并出棧 ? ? ?機(jī)器碼 ?DD mm011mmm ?
FSTP ?real10 ptr mem ?保存十字節(jié)浮點(diǎn)數(shù)到mem并出棧 ? ? ?機(jī)器碼 ?DB mm111mmm ?
??
FISTP ? word ptr mem ?保存二字節(jié)整數(shù)到mem并出棧 ? ? ? ? ? 機(jī)器碼 ?DF mm011mmm ?
FISTP ?dword ptr mem ?保存四字節(jié)整數(shù)到mem并出棧 ? ? ? ? ? 機(jī)器碼 ?DB mm011mmm ?
FISTP ?qword ptr mem ?保存八字節(jié)整數(shù)到mem并出棧 ? ? ? ? ? 機(jī)器碼 ?DF mm111mmm ?
??
FBSTP ?tbyte ptr mem ?保存十字節(jié)BCD數(shù)到mem并出棧 ? ? 機(jī)器碼 ?DF mm110mmm ?
??
FCMOVB ? ? ? ? ? ? ? ?ST(0),ST(i) <時(shí)傳送 ? ? ? ? ? ? ?機(jī)器碼 ?DA C0iii ?
FCMOVBE ? ? ? ? ? ? ? ST(0),ST(i) <=時(shí)傳送 ? ? ? ? ? ? 機(jī)器碼 ?DA D0iii ?
FCMOVE ? ? ? ? ? ? ? ?ST(0),ST(i) =時(shí)傳送 ? ? ? ? ? ? 機(jī)器碼 ?DA C1iii ?
FCMOVNB ? ? ? ? ? ? ? ST(0),ST(i) >=時(shí)傳送 ? ? ? ? ? ? 機(jī)器碼 ?DB C0iii ?
FCMOVNBE ? ? ? ? ? ? ?ST(0),ST(i) >時(shí)傳送 ? ? ? ? ? ? ?機(jī)器碼 ?DB D0iii ?
FCMOVNE ? ? ? ? ? ? ? ST(0),ST(i) !=時(shí)傳送 ? ? ? ? ? ?機(jī)器碼 ?DB C1iii ?
FCMOVNU ? ? ? ? ? ? ? ST(0),ST(i) 有序時(shí)傳送 ? ? ? ?機(jī)器碼 ?DB D1iii ?
FCMOVU ? ? ? ? ? ? ? ?ST(0),ST(i) 無(wú)序時(shí)傳送 ? ? ? ?機(jī)器碼 ?DA D1iii ?
---------- 三、比較指令 ? -------------------------------------------------------- ?
FCOM ? ? ? ? ? ? ? ? ?ST(0)-ST(1) ? ? ? ? ? ? ? ? ? ? ?機(jī)器碼 ?D8 D1 ?
FCOMI ? ? ? ? ? ? ? ? ST(0),ST(i) ?ST(0)-ST(1) ? ? ? ? 機(jī)器碼 ?DB F0iii ?
FCOMIP ? ? ? ? ? ? ? ?ST(0),ST(i) ?ST(0)-ST(1)并出棧 ? 機(jī)器碼 ?DF F0iii ?
FCOM ? real4 ptr mem ?ST(0)-實(shí)數(shù)mem ? ? ? ? ? ? ? ? ? ? ?機(jī)器碼 ?D8 mm010mmm ?
FCOM ? real8 ptr mem ?ST(0)-實(shí)數(shù)mem ? ? ? ? ? ? ? ? ? ? ?機(jī)器碼 ?DC mm010mmm ?
??
FICOM ? word ptr mem ?ST(0)-整數(shù)mem ? ? ? ? ? ? ? ? ? ? ?機(jī)器碼 ?DE mm010mmm ?
FICOM ?dword ptr mem ?ST(0)-整數(shù)mem ? ? ? ? ? ? ? ? ? ? ?機(jī)器碼 ?DA mm010mmm ?
FICOMP ?word ptr mem ?ST(0)-整數(shù)mem并出棧 ? ? ? ? ? ? ? 機(jī)器碼 ?DE mm011mmm ?
FICOMP dword ptr mem ?ST(0)-整數(shù)mem并出棧 ? ? ? ? ? ? ? 機(jī)器碼 ?DA mm011mmm ?
??
FTST ? ? ? ? ? ? ? ? ?ST(0)-0 ? ? ? ? ? ? ? ? ? ? ? ? ?機(jī)器碼 ?D9 E4 ?
FUCOM ?ST(i) ? ? ? ? ?ST(0)-ST(i) ? ? ? ? ? ? ? ? ? ? ?機(jī)器碼 ?DD E0iii ?
FUCOMP ST(i) ? ? ? ? ?ST(0)-ST(i)并出棧 ? ? ? ? ? ? ? ? ? 機(jī)器碼 ?DD E1iii ?
FUCOMPP ? ? ? ? ? ? ? ST(0)-ST(1)并二次出棧 ? ? ? ? ? ? 機(jī)器碼 ?DA E9 ?
FXAM ? ? ? ? ? ? ? ? ?ST(0)規(guī)格類型 ? ? ? ? ? ? ? ? ? ?機(jī)器碼 ?D9 E5 ?
---------- 四、運(yùn)算指令 ? -------------------------------------------------------- ?
FADD ? ? ? ? ? ? ? ? ?把目的操作數(shù) (直接接在指令后的變量或堆棧緩存器) 與來(lái)源操作數(shù) (接在目的操作數(shù)后的變量或堆棧緩存器) ?相加,并將結(jié)果存入目的操作數(shù) ?
FADDP ?ST(i),ST ? ? ? 這個(gè)指令是使目的操作數(shù)加上 ST ?緩存器,并彈出 ST 緩存器,而目的操作數(shù)必須是堆棧緩存器的其中之一,最后不管目的操作數(shù)為何,經(jīng)彈出一次后,目的操作數(shù)會(huì)變成上一個(gè)堆棧緩存器了 ?
FIADD ? ? ? ? ? ? ? ? FIADD 是把 ST ? 加上來(lái)源操作數(shù),然后再存入 ST 緩存器,來(lái)源操作數(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 的正負(fù)值 ?
??
FABS ? ? ? ? ? ? ? ? ?把 ST ?之值取出,取其絕對(duì)值后再存回去。 ?
??
FSQRT ? ? ? ? ? ? ? ? 將 ST ?之值取出,開根號(hào)后再存回去。 ?
??
FSCALE ? ? ? ? ? ? ? ?這個(gè)指令是計(jì)算 ST*2^ST(1)之值,再把結(jié)果存入 ST 里而 ST(1) ? 之值不變。ST(1) ?必須是在 -32768 到 32768 (-215 到 215 )之間的整數(shù),如果超過這個(gè)范圍計(jì)算結(jié)果無(wú)法確定,如果不是整數(shù) ST(1) ? ?會(huì)先向零舍入成整數(shù)再計(jì)算。所以為安全起見,最好是由字組整數(shù)載入到 ST(1) 里。 ?
??
FRNDINT ? ? ? ? ? ? ? 這個(gè)指令是把 ST 的數(shù)值舍入成整數(shù),FPU ? ?提供四種舍入方式,由 FPU 的控制字組(control ? ?word)中的 RC 兩個(gè)位決定 ?
? ? ? ? ? ? ? ? ? ? ? ? ? RC ? ?舍入控制 ?
? ? ? ? ? ? ? ? ? ? ? ? ? 00 ? ?四舍五入 ?
? ? ? ? ? ? ? ? ? ? ? ? ? 01 ? ?向負(fù)無(wú)限大舍入 ?
? ? ? ? ? ? ? ? ? ? ? ? ? 10 ? ?向正無(wú)限大舍入 ?
? ? ? ? ? ? ? ? ? ? ? ? ? 11 ? ?向零舍去 ?
================================================================================ ?
?
?
原文:https://blog.csdn.net/bjbz_cxy/article/details/79467688
總結(jié)
- 上一篇: 如何在Visual Studio项目中正
- 下一篇: vb逆向常用函数