首页  编辑  

常用汇编指令

Tags: /超级猛料/Language.Object Pascal/内嵌汇编、函数、过程/   Date Created:

The built-in assembler supports the following opcodes.

LOCK        REP        REPE        REPZ        REPNE

REPNZ        SEGES        SEGCS        SEGSS        SEGDS

SEGFS        SEGGS        ADC,mLeft        ADD,mLeft        AND,mLeft

AAA,mAX        AAS,mAX        AAD,mAX        AAM,mAX        BOUND,

 mNONE

BSF,mLeft        BSR,mLeft        BT        BTC,mLeft        BTR,mLeft

BTS,mLeft        CALL,mNONE        CMP        CBW,mAX        CWDE,mAX

CWD,

 <mAX,mDX>        CDQ,

 <mAX,mDX>        CLC        CLD        CLI

CMC        CMPSB,

 <mSIDI>        CMPSW,

 <mSIDI>        CMPSD,

 <mSIDI>        DAA,mAX

DAS,mAX        DEC,mLeft        DIV,mLeft        ENTER,

 mNONE        HLT

IDIV,mLeft        IMUL,mLeft        IN,mLeft        INC,mLeft        INSB,mDI

INSW,mDI        INSD,mDI        INT        INTO        IRET

IRETD        JMP        JO        JNO        JC

JB        JNAE        JNC        JAE        JNB

JE        JZ        JNE        JNZ        JBE

JNA        JA        JNBE        JS        JNS

JP        JPE        JNP        JPO        JL

JNGE        JGE        JNL        JLE        JNG

JG        JNLE        JCXZ        JECXZ        LAHF,mAX

LEA,mLeft        LEAVE,

 mNONE        LDS,mSpecial        LES,mSpecial        LFS,mSpecial

LGS,mSpecial        LSS,mSpecial        LODSB,

 <mAX,mDI>        LODSW,

 <mAX,mDI>        LODSD,

 <mAX,mDI>

LOOP,mCX        LOOPE,mCX        LOOPZ,mCX        LOOPNE,mCX        LOOPNZ,mCX

LOOPD,mCX        LOOPDE,mCX        LOOPDZ,mCX        LOOPDNE,

 mCX        LOOPDNZ,

 mCX

MOV,mLeft        MOVSX,mLeft        MOVZX,mLeft        MOVSB,

 <mSIDI>        MOVSW,

 <mSIDI>

MOVSD,

 <mSIDI>        MUL,mLeft        NEG,mLeft        NOP        NOT,mLeft

OR,mLeft        OUT        OUTSB,mSI        OUTSW,mSI        OUTSD,mSI

POP,mLeft        POPF        POPA,mSpecial        POPAD,

 mSpecial        POPFD,

 mSpecial

PUSH        PUSHF        PUSHA        PUSHAD        PUSHFD

RET        RETN        RETF        SUB,mLeft        SBB,mLeft

RCL,mLeft        RCR,mLeft        ROL,mLeft        ROR,mLeft        SAL,mLeft

SHL,mLeft        SAR,mLeft        SHR,mLeft        SHLD,mLeft        SHRD,mLeft

SAHF        SCASB,mDI        SCASW,mDI        SCASD,mDI        STC

STD        STI        STOSB,mDI        STOSW,mDI        STOSD,mDI

TEST        WAIT        XCHG,<mLeft,

 mRight>        XLAT,mAX        XOR,mLeft

SETA,mLeft        SETAE,mLeft        SETB,mLeft        SETBE,mLeft        SETC,mLeft

SETE,mLeft        SETG,mLeft        SETGE,mLeft        SETL,mLeft        SETLE,mLeft

SETNA,mLeft        SETNAE,mLeft        SETNB,mLeft        SETNBE,mLeft        SETNC,mLeft

SETNE,mLeft        SETNG,mLeft        SETNGE,mLeft        SETNL,mLeft        SETNLE,mLeft

SETNO,mLeft        SETNP,mLeft        SETNS,mLeft        SETNZ,mLeft        SETO,mLeft

SETP,mLeft        SETPE,mLeft        SETPO,mLeft        SETS,mLeft        SETZ,mLeft

ARPL        LAR,mLeft        CLTS        LGDT        SGDT

LIDT        SIDT        LLDT        SLDT        LMSW

SMSW        LSL,mLeft        LTR,mLeft        STR,mLeft        VERR

VERW        BSWAP,mLeft        XADD,mLeft        CMPXCHG,

 <mLeft,mAX>        INVD

WBINVD        INVLPG        FLD,m87        FILD,m87        FST,m87

FSTP,m87        FIST,m87        FISTP,m87        FADD,m87        FADDP,m87

FIADD,m87        FSUB,m87        FSUBP,m87        FSUBR,m87        FSUBRP,m87

FISUB,m87        FISUBR,m87        FMUL,m87        FMULP,m87        FIMUL,m87

FDIV,m87        FDIVP,m87        FDIVR,m87        FDIVRP,m87        FIDIV,m87

FIDIVR,m87        FCOM,m87        FCOMP,m87        FCOMPP,m87        FICOM,m87

FICOMP,m87        F2XM1,m87        FABS,m87        FBLD,m87        FBSTP,m87

FCHS,m87        FDECSTP,m87        FFREE,m87        FINCSTP,m87        FLD1,m87

FLDCW,m87        FLDENV,m87        FLDL2E,m87        FLDL2T,m87        FLDLG2,m87

FLDLN2,m87        FLDPI,m87        FLDZ,m87        FNOP,m87        FPREM,m87

FPATAN,m87        FPTAN,m87        FRNDINT,m87        FRSTOR,m87        FSCALE,m87

FSETPM,m87        FSQRT,m87        FTST,m87        FWAIT,m87        FXAM,m87

FXCH,m87        FXTRACT,m87        FYL2X,m87        FYL2XP1,m87        FCLEX,m87

FNCLEX,m87        FDISI,m87        FNDISI,m87        FENI,m87        FNENI,m87

FINIT,m87        FNINIT,m87        FSAVE,m87        FNSAVE,m87        FSTCW,m87

FNSTCW,m87        FSTENV,m87        FNSTENV,m87        FSTSW,m87        FNSTSW,m87

FUCOM,m87        FUCOMP,m87        FUCOMPP,m87        FPREM1,m87        FCOS,m87

FSIN,m87        FSINCOS,m87                        

For a complete description of each instruction, refer to your microprocessor documentation.

RET instruction sizing

The RET instruction opcode always generates a near return.

Automatic jump sizing

Unless otherwise directed, the built-in assembler optimizes jump instructions by automatically selecting the shortest, and therefore most efficient, form of a jump instruction. This automatic jump sizing applies to the unconditional jump instruction (JMP), and to all conditional jump instructions when the target is a label (not a procedure or function).

For an unconditional jump instruction (JMP), the built-in assembler generates a short jump (one-byte opcode followed by a one-byte displacement) if the distance to the target label is ?28 to 127 bytes. Otherwise it generates a near jump (one-byte opcode followed by a two-byte displacement).

For a conditional jump instruction, a short jump (one-byte opcode followed by a one-byte displacement) is generated if the distance to the target label is ?28 to 127 bytes. Otherwise, the built-in assembler generates a short jump with the inverse condition, which jumps over a near jump to the target label (five bytes in total). For example, the assembler statement

JC      Stop

where Stop isn 抰 within reach of a short jump, is converted to a machine code sequence that corresponds to this:

JNC      Skip

JMP      Stop

Skip:

Jumps to the entry points of procedures and functions are always near.