Volume 3 General-Purpose and System Instructions (794097), страница 57
Текст из файла (страница 57)
Second Byte of Two-Byte Opcodes, Low Nibble 8–FhPrefix Nibble1n/a0n/a189ABCDEFINVDWBINVDinvalidUD2invalidGroup P2FEMMS3DNow!PREFETCHGroup 162NOP3MOVAPSnoneF3266F2n/a3n/a4See“3DNow!™Opcodes” onpage 351NOP3NOP3NOP3NOP3NOP3NOP3CVTPI2PSMOVNTPSCVTTPS2PICVTPS2PIUCOMISSCOMISSVps, WpsWps, VpsVps, QqMdq, VpsPq, WpsPq, WpsVss, WssVps, WpsinvalidinvalidCVTSI2SSMOVNTSSCVTTSS2SICVTSS2SIinvalidinvalidVss, Ed/qMd, VssGd/q, WssGd/q, WssCVTPI2PDMOVNTPDCVTTPD2PICVTPD2PIUCOMISDCOMISDVpd, WpdMOVAPDWpd, VpdVpd, QqMdq, VpdPq, WpdPq, WpdVsd, WsdVpd, WsdinvalidinvalidCVTSI2SDMOVNTSDCVTTSD2SICVTSD2SIinvalidinvalidVsd, Ed/qMq, VsdGd/q, WsdGd/q, WsdinvalidinvalidinvalidinvalidinvalidinvalidinvalidinvalidCMOVSCMOVNSCMOVPCMOVNPCMOVLCMOVNLCMOVLECMOVNLEGv, EvGv, EvGv, EvGv, EvGv, EvGv, EvGv, EvGv, EvNote:1. All two-byte opcodes begin with an 0Fh byte.
Rows show high opcode nibble (hex), columns show low opcode nibblein hex.2. An opcode extension is specified in the ModRM reg field (bits 5–3). See “ModRM Extensions to One-Byte and TwoByte Opcodes” on page 348 for details.3. This instruction takes a ModRM byte.Opcode and Operand Encodings345AMD64 Technology24594—Rev. 3.13—July 2007Table A-4.
Second Byte of Two-Byte Opcodes, Low Nibble 8–Fh (continued)Prefix Nibble1noneF3566F2noneF3666F2none766n/a89AnoneF3BF2n/aABCCDEFADDPSMULPSCVTPS2PDCVTDQ2PSSUBPSMINPSDIVPSMAXPSVps, WpsVpd, WpsVps, WdqVps, WpsVps, WpsVps, WpsVps, WpsADDSSMULSSCVTSS2SDCVTTPS2DQSUBSSMINSSDIVSSMAXSSVss, WssVss, WssVsd, WssVdq, WpsVss, WssVss, WssVss, WssVss, WssADDPDMULPDCVTPD2PSCVTPS2DQSUBPDMINPDDIVPDMAXPDVpd, WpdVpd, WpdVps, WpdVdq, WpsVpd, WpdVpd, WpdVpd, WpdVpd, WpdinvalidADDSDMULSDCVTSD2SSVsd, WsdVsd, WsdVss, WsdSUBSDMINSDDIVSDMAXSDVsd, WsdVsd, WsdVsd, WsdVsd, WsdPUNPCKHBWPUNPCKHWDPUNPCKHDQPACKSSDWinvalidinvalidMOVDMOVQPq, QdPq, QdPq, QdPq, QqinvalidinvalidinvalidinvalidinvalidinvalidPUNPCKHBWPUNPCKHWDPUNPCKHDQPACKSSDWPUNPCKLQDQPUNPCKHQDQMOVDMOVDQAVdq, WqinvalidVdq, WqVdq, WqVdq, WdqVdq, WqVdq, WqVdq, Ed/qVdq, WdqinvalidinvalidinvalidinvalidinvalidinvalidinvalidinvalidinvalidinvalidinvalidinvalidinvalidPq, Ed/qPq, QqinvalidMOVDQUVdq, WdqGroup 172invalidEXTRQinvalidinvalidinvalidinvalidinvalidVdq, VRqF2n/a9Vps, WpsinvalidF3n/a8invalidinvalidinvalidMOVDMOVQEd/q, Pd/qQq, PqMOVQMOVDQUVq, WqWdq, VdqHADDPDHSUBPDMOVDMOVDQAVpd,WpdVpd,WpdEd/q, Vd/qWdq, VdqHADDPSHSUBPSinvalidinvalidVps,WpsVps,WpsJNLEINSERTQINSERTQVdq,VRq,Ib,IbVdq, VRdqJSJNSJPJNPJLJNLJLEJzJzJzJzJzJzJzJzSETSSETNSSETPSETNPSETLSETNLSETLESETNLEEbEbEbEbEbPUSHPOPRSMBTSGSGSreservedGroup 102EbSHRDEv, GvEv, Gv, IbEv, Gv, CLGroup 82BTCBSFBSREv, IbEv, GvGv, EvPOPCNTGv, EvEbEbGroup 152IMULGv, EvMOVSXGv, EbGv, EwrSI/r14rDI/r15LZCNTGv, EvGv, EvreservedreservedBSWAPrAX/r8rCX/r9rDX/r10rBX/r11rSP/r12rBP/r13Note:1.
All two-byte opcodes begin with an 0Fh byte. Rows show high opcode nibble (hex), columns show low opcode nibblein hex.2. An opcode extension is specified in the ModRM reg field (bits 5–3). See “ModRM Extensions to One-Byte and TwoByte Opcodes” on page 348 for details.3. This instruction takes a ModRM byte.346Opcode and Operand Encodings24594—Rev.
3.13—July 2007AMD64 TechnologyTable A-4. Second Byte of Two-Byte Opcodes, Low Nibble 8–Fh (continued)Prefix Nibble1noneF3D66F2noneF3E66F2noneF3F66F289ABCDEFPSUBUSBPSUBUSWPq, QqPq, QqPMINUBPANDPADDUSBPADDUSWPMAXUBPANDNPq, QqPq, QqPq, QqPq, QqPq, QqinvalidinvalidPq, QqinvalidinvalidinvalidinvalidinvalidinvalidPSUBUSBPSUBUSWVdq, WdqVdq, WdqPMINUBPANDPADDUSBPADDUSWPMAXUBPANDNVdq, WdqVdq, WdqVdq, WdqVdq, WdqVdq, WdqVdq, WdqinvalidinvalidinvalidinvalidinvalidinvalidinvalidinvalidPSUBSBPSUBSWPq, QqPq, QqPMINSWPORPADDSBPADDSWPMAXSWPXORPq, QqPq, QqPq, QqPq, QqPq, QqPq, QqinvalidinvalidinvalidinvalidinvalidinvalidinvalidinvalidPSUBSBPSUBSWPMINSWPORPADDSBPADDSWPMAXSWPXORVdq, WdqVdq, WdqVdq, WdqVdq, WdqVdq, WdqVdq, WdqVdq, WdqVdq, WdqinvalidinvalidinvalidinvalidinvalidinvalidinvalidinvalidPSUBBPSUBWPSUBDPSUBQPADDBPADDWPADDDinvalidPq, QqPq, QqPq, QqPq, QqPq, QqPq, QqPq, QqinvalidinvalidinvalidinvalidinvalidinvalidinvalidinvalidinvalidPSUBBPSUBWPSUBDPSUBQPADDBPADDWPADDDVdq, WdqVdq, WdqVdq, WdqVdq, WdqVdq, WdqVdq, WdqVdq, WdqinvalidinvalidinvalidinvalidinvalidinvalidinvalidinvalidNote:1.
All two-byte opcodes begin with an 0Fh byte. Rows show high opcode nibble (hex), columns show low opcode nibblein hex.2. An opcode extension is specified in the ModRM reg field (bits 5–3). See “ModRM Extensions to One-Byte and TwoByte Opcodes” on page 348 for details.3. This instruction takes a ModRM byte.A.2.3 rFLAGS Condition Codes for Two-Byte OpcodesTable A-5 shows the rFLAGS condition codes specified by the low nibble in the second opcode byte ofthe CMOVcc, Jcc, and SETcc instructions.Opcode and Operand Encodings347AMD64 Technology24594—Rev.
3.13—July 2007Table A-5. rFLAGS Condition Codes for CMOVcc, Jcc, and SETccLow Nibble ofSecond OpcodeByte (hex)rFLAGS Valuecc MnemonicArithmeticTypeCondition(s)0OF = 1O1OF = 0NOOverflow2CF = 1B, C, NAEBelow, Carry, Not Above or Equal3CF = 0NB, NC, AENot Below, No Carry, Above or Equal4ZF = 1Z, E5ZF = 0NZ, NESignedNo OverflowZero, EqualUnsignedNot Zero, Not Equal6CF = 1 or ZF = 1BE, NABelow or Equal, Not Above7CF = 0 and ZF = 0NBE, ANot Below or Equal, Above8SF = 1S9SF = 0NSAPF = 1P, PEBPF = 0NP, POC(SF xor OF) = 1L, NGELess than, Not Greater than or Equal toD(SF xor OF) = 0NL, GENot Less than, Greater than or Equal toE(SF xor OF) = 1or ZF = 1LE, NGF(SF xor OF) = 0and ZF = 0NLE, GSignSignedNot SignParity, Parity Evenn/aNot Parity, Parity OddSignedLess than or Equal to, Not Greater thanNot Less than or Equal to, Greater thanA.2.4 ModRM Extensions to One-Byte and Two-Byte OpcodesThe ModRM byte, which immediately follows the last opcode byte, is used in certain instructionencodings to provide additional opcode bits with which to define the function of the instruction.ModRM bytes have three fields—mod, reg, and r/m, as shown in Figure A-1.Bits:765mod4reg321r/m0ModRM513-325.epsFigure A-1.ModRM-Byte FieldsIn most cases, the reg field (bits 5–3) provides the additional bits with which to extend the encodingsof the first one or two opcode bytes.
In the case of the x87 floating-point instructions, the entireModRM byte is used to extend the opcode encodings.Table A-6 on page 349 shows how the ModRM reg field is used to extend the range of one-byte andtwo-byte opcodes. The opcode ranges are organized into groups of opcode extensions. The groupnumber is shown in the left-most column of Table A-6. These groups are referenced in the opcodes348Opcode and Operand Encodings24594—Rev. 3.13—July 2007AMD64 Technologyshown in Table A-1 on page 341 through Table A-4 on page 345. An entry of “n.a.” in the Prefixcolumn means that prefixes are not applicable to the opcodes in that row.
Prefixes only apply to certain128-bit media, 64-bit media, and a few other instructions introduced with the SSE or SSE2technologies.The /0 through /7 notation for the ModRM reg field (bits 5–3) means that the three-bit field contains avalue from zero (binary 000) to 7 (binary 111).Table A-6. One-Byte and Two-Byte Opcode ModRM ExtensionsGroupNumberPrefix Opcode8081Group 1n/a8283Group 1an/a8FC0C1D0Group 2n/aD1D2D3Group 3Group 4/1/2/5/6/7ORADCSBBANDSUBXORCMPEb, IbEb, IbEb, IbEb, IbEb, IbEb, IbEb, IbEb, IbADDORADCSBBANDSUBXORCMPEv, IzEv, IzEv, IzEv, IzEv, IzEv, IzEv, IzEv, IzADDORADCSBBANDSUBXORCMPEb, Ib2Eb, Ib2Eb, Ib2Eb, Ib2Eb, Ib2Eb, Ib2Eb, Ib2Eb, Ib2ADDORADCSBBANDSUBXORCMPEv, IbEv, IbEv, IbEv, IbEv, IbEv, IbEv, IbEv, IbPOPinvalidinvalidinvalidinvalidinvalidinvalidinvalidEvROLRORRCLRCRSHL/SALSHRSHL/SALSAREb, IbEb, IbEb, IbEb, IbEb, IbEb, IbEb, IbEb, IbROLRORRCLRCRSHL/SALSHRSHL/SALSAREv, IbEv, IbEv, IbEv, IbEv, IbEv, IbEv, IbEv, IbROLRORRCLRCRSHL/SALSHRSHL/SALSAREb, 1Eb, 1Eb, 1Eb, 1Eb, 1Eb, 1Eb, 1Eb, 1ROLRORRCLRCRSHL/SALSHRSHL/SALSAREv, 1Ev, 1Ev, 1Ev, 1Ev, 1Ev, 1Ev, 1Ev, 1ROLRORRCLRCRSHL/SALSHRSHL/SALSAREb, CLEb, CLEb, CLEb, CLEb, CLEb, CLEb, CLEb, CLROLRORRCLRCRSHL/SALSHRSHL/SALSAREv, CLEv, CLEv, CLEv, CLEv, CLEv, CLEv, CLEv, CLIDIVF6TESTEb,IbNOTNEGMULIMULDIVEbEbEbEbEbEbF7TESTEv,IzNOTNEGMULIMULDIVIDIVFEGroup 5n/aFFGroup 6n/a0F 00Note:1.2.3.4./0ADDn/an/aModRM reg Field/3/4INCDECEvEvEvEvEvEvinvalidinvalidinvalidinvalidinvalidinvalidinvalidEbEbINCDECCALLCALLJMPJMPPUSHEvEvEvMpEvMpEvSLDTSTRLLDTLTRVERRVERWinvalidMw/RvMw/RvEwEwEwEwinvalidSee Table A-7 on page 351 for ModRM extensions of this two-byte opcode.Invalid in 64-bit mode.This instruction takes a ModRM byte.Reserved prefetch encodings are aliased to the /0 encoding (PREFETCH Exclusive) for future compatibility.Opcode and Operand Encodings349AMD64 Technology24594—Rev.
3.13—July 2007Table A-6. One-Byte and Two-Byte Opcode ModRM Extensions (continued)GroupNumberGroup 7Prefix Opcoden/a0F 01/0/1SGDTMsMONITORn/a0F BAinvalidinvalidGroup 9n/aModRM reg Field/3/4SIDTLGDTLIDTSMSWMsMsMsSVM1Mw/Rvinvalidinvalidinvalid1MWAITGroup 8/2CMPXCHG8B/5invalid/6/7LMSWINVLPGMbEwSWAPGS1RDTSCPBTBTSBTRBTCEv, IbEv, IbEv, IbEv, IbinvalidinvalidinvalidinvalidinvalidinvalidMq0F C7CMPXCHG16MdqGroup 10n/a0F B9n/aC6n/aC7Group 11660F 71none660F 72none66invalidinvalidinvalidinvalidinvalidMOVinvalidinvalidinvalidinvalidinvalidinvalidinvalidinvalidinvalidinvalidinvalidinvalidinvalidinvalidinvalidPSRLWinvalidPSRAWinvalidPSLLWinvalidEb,IbMOVEv,Izinvalid0F 730F AE66,F2, F3Note:1.2.3.4.350PSRAWinvalidVRdq, IbinvalidinvalidinvalidinvalidinvalidinvalidPSRLDinvalidPSRADinvalidinvalidinvalidPSRLDPRq, IbinvalidVRdq, IbPSRADinvalidVRdq, IbinvalidinvalidinvalidinvalidinvalidinvalidPSRLQinvalidinvalidinvalid0F 18invalidPSRLQPSRLDQVRdq, IbVRdq, IbinvalidinvalidFXRSTOR LDMXCSR STMXCSRMMdMdinvalidinvalidinvalidinvalidPREFETCH PREFETCH PREFETCH PREFETCHT0T1invalidPSLLDinvalidPSLLDinvalidinvalidinvalidPSLLQinvalidPRq, IbMNTAinvalidVRdq, IbinvalidinvalidinvalidPRq, IbinvalidinvalidPSLLWVRdq, Ibinvalidinvalidnonen/a.invalidinvalidFXSAVEGroup 16PSRLWVRdq, IbPRq, IbPRq, IbF2, F3Group 15invalidPRq, IbPRq, IbF2, F3Group 14invalidPRq, IbF2, F3Group 13invalidinvalidnoneGroup 12invalidinvalidinvalidPSLLQPSLLDQVRdq, IbVRdq, IbinvalidinvalidinvalidinvalidinvalidLFENCE1MFENCE1SFENCE1CLFLUSHMbinvalidinvalidinvalidinvalidNOP4NOP4NOP4NOP4T2See Table A-7 on page 351 for ModRM extensions of this two-byte opcode.Invalid in 64-bit mode.This instruction takes a ModRM byte.Reserved prefetch encodings are aliased to the /0 encoding (PREFETCH Exclusive) for future compatibility.Opcode and Operand Encodings24594—Rev.