Volume 2A Instruction Set Reference A-M (794101), страница 37
Текст из файла (страница 37)
2A 3-147INSTRUCTION SET REFERENCE, A-MCLTS—Clear Task-Switched Flag in CR0OpcodeInstructionOp/En64-bitModeCompat/ DescriptionLeg Mode0F 06CLTSAValidValidClears TS flag in CR0.Instruction Operand EncodingOp/EnOperand 1Operand 2Operand 3Operand 4ANANANANADescriptionClears the task-switched (TS) flag in the CR0 register. This instruction is intended foruse in operating-system procedures.
It is a privileged instruction that can only beexecuted at a CPL of 0. It is allowed to be executed in real-address mode to allowinitialization for protected mode.The processor sets the TS flag every time a task switch occurs. The flag is used tosynchronize the saving of FPU context in multitasking applications. See the description of the TS flag in the section titled “Control Registers” in Chapter 2 of the Intel®64 and IA-32 Architectures Software Developer’s Manual, Volume 3A, for more information about this flag.CLTS operation is the same in non-64-bit modes and 64-bit mode.See Chapter 22, “VMX Non-Root Operation,” of the Intel® 64 and IA-32 ArchitecturesSoftware Developer’s Manual, Volume 3B, for more information about the behaviorof this instruction in VMX non-root operation.OperationCR0.TS[bit 3] ← 0;Flags AffectedThe TS flag in CR0 register is cleared.Protected Mode Exceptions#GP(0)If the current privilege level is not 0.#UDIf the LOCK prefix is used.Real-Address Mode Exceptions#UD3-148 Vol.
2AIf the LOCK prefix is used.CLTS—Clear Task-Switched Flag in CR0INSTRUCTION SET REFERENCE, A-MVirtual-8086 Mode Exceptions#GP(0)CLTS is not recognized in virtual-8086 mode.#UDIf the LOCK prefix is used.Compatibility Mode ExceptionsSame exceptions as in protected mode.64-Bit Mode Exceptions#GP(0)If the CPL is greater than 0.#UDIf the LOCK prefix is used.CLTS—Clear Task-Switched Flag in CR0Vol. 2A 3-149INSTRUCTION SET REFERENCE, A-MCMC—Complement Carry FlagOpcodeInstructionOp/En64-bitModeCompat/ DescriptionLeg ModeF5CMCAValidValidComplement CF flag.Instruction Operand EncodingOp/EnOperand 1Operand 2Operand 3Operand 4ANANANANADescriptionComplements the CF flag in the EFLAGS register.
CMC operation is the same in non64-bit modes and 64-bit mode.OperationEFLAGS.CF[bit 0]← NOT EFLAGS.CF[bit 0];Flags AffectedThe CF flag contains the complement of its original value. The OF, ZF, SF, AF, and PFflags are unaffected.Exceptions (All Operating Modes)#UD3-150 Vol. 2AIf the LOCK prefix is used.CMC—Complement Carry FlagINSTRUCTION SET REFERENCE, A-MCMOVcc—Conditional MoveOpcodeInstructionOp/En64-BitModeCompat/ DescriptionLeg Mode0F 47 /rCMOVA r16, r/m16AValidValidMove if above (CF=0 andZF=0).0F 47 /rCMOVA r32, r/m32AValidValidMove if above (CF=0 andZF=0).REX.W + 0F 47/rCMOVA r64, r/m64AValidN.E.Move if above (CF=0 andZF=0).0F 43 /rCMOVAE r16, r/m16 AValidValidMove if above or equal(CF=0).0F 43 /rCMOVAE r32, r/m32 AValidValidMove if above or equal(CF=0).REX.W + 0F 43/rCMOVAE r64, r/m64 AValidN.E.Move if above or equal(CF=0).0F 42 /rCMOVB r16, r/m16AValidValidMove if below (CF=1).0F 42 /rCMOVB r32, r/m32AValidValidMove if below (CF=1).REX.W + 0F 42/rCMOVB r64, r/m64AValidN.E.Move if below (CF=1).0F 46 /rCMOVBE r16, r/m16 AValidValidMove if below or equal(CF=1 or ZF=1).0F 46 /rCMOVBE r32, r/m32 AValidValidMove if below or equal(CF=1 or ZF=1).REX.W + 0F 46/rCMOVBE r64, r/m64 AValidN.E.Move if below or equal(CF=1 or ZF=1).0F 42 /rCMOVC r16, r/m16AValidValidMove if carry (CF=1).0F 42 /rCMOVC r32, r/m32AValidValidMove if carry (CF=1).REX.W + 0F 42/rCMOVC r64, r/m64AValidN.E.Move if carry (CF=1).0F 44 /rCMOVE r16, r/m16AValidValidMove if equal (ZF=1).0F 44 /rCMOVE r32, r/m32AValidValidMove if equal (ZF=1).REX.W + 0F 44/rCMOVE r64, r/m64AValidN.E.Move if equal (ZF=1).0F 4F /rCMOVG r16, r/m16AValidValidMove if greater (ZF=0 andSF=OF).0F 4F /rCMOVG r32, r/m32AValidValidMove if greater (ZF=0 andSF=OF).REX.W + 0F 4F/rCMOVG r64, r/m64AValidN.E.Move if greater (ZF=0 andSF=OF).CMOVcc—Conditional MoveVol.
2A 3-151INSTRUCTION SET REFERENCE, A-MOpcodeInstruction0F 4D /r64-BitModeCompat/ DescriptionLeg ModeCMOVGE r16, r/m16 AValidValidMove if greater or equal(SF=OF).0F 4D /rCMOVGE r32, r/m32 AValidValidMove if greater or equal(SF=OF).REX.W + 0F 4D/rCMOVGE r64, r/m64 AValidN.E.Move if greater or equal(SF=OF).0F 4C /rCMOVL r16, r/m16AValidValidMove if less (SF≠ OF).0F 4C /rCMOVL r32, r/m32AValidValidMove if less (SF≠ OF).REX.W + 0F 4C/rCMOVL r64, r/m64AValidN.E.Move if less (SF≠ OF).0F 4E /rCMOVLE r16, r/m16AValidValidMove if less or equal (ZF=1or SF≠ OF).0F 4E /rCMOVLE r32, r/m32AValidValidMove if less or equal (ZF=1or SF≠ OF).REX.W + 0F 4E/rCMOVLE r64, r/m64AValidN.E.Move if less or equal (ZF=1or SF≠ OF).0F 46 /rCMOVNA r16, r/m16 AValidValidMove if not above (CF=1 orZF=1).0F 46 /rCMOVNA r32, r/m32 AValidValidMove if not above (CF=1 orZF=1).REX.W + 0F 46/rCMOVNA r64, r/m64 AValidN.E.Move if not above (CF=1 orZF=1).0F 42 /rCMOVNAE r16,r/m16AValidValidMove if not above or equal(CF=1).0F 42 /rCMOVNAE r32,r/m32AValidValidMove if not above or equal(CF=1).REX.W + 0F 42/rCMOVNAE r64,r/m64AValidN.E.Move if not above or equal(CF=1).0F 43 /rCMOVNB r16, r/m16 AValidValidMove if not below (CF=0).0F 43 /rCMOVNB r32, r/m32 AValidValidMove if not below (CF=0).REX.W + 0F 43/rCMOVNB r64, r/m64 AValidN.E.Move if not below (CF=0).0F 47 /rCMOVNBE r16,r/m16AValidValidMove if not below or equal(CF=0 and ZF=0).0F 47 /rCMOVNBE r32,r/m32AValidValidMove if not below or equal(CF=0 and ZF=0).3-152 Vol.
2AOp/EnCMOVcc—Conditional MoveINSTRUCTION SET REFERENCE, A-MOpcodeInstructionOp/En64-BitModeCompat/ DescriptionLeg ModeREX.W + 0F 47/rCMOVNBE r64,r/m64AValidN.E.Move if not below or equal(CF=0 and ZF=0).0F 43 /rCMOVNC r16, r/m16 AValidValidMove if not carry (CF=0).0F 43 /rCMOVNC r32, r/m32 AValidValidMove if not carry (CF=0).REX.W + 0F 43/rCMOVNC r64, r/m64 AValidN.E.Move if not carry (CF=0).0F 45 /rCMOVNE r16, r/m16 AValidValidMove if not equal (ZF=0).0F 45 /rCMOVNE r32, r/m32 AValidValidMove if not equal (ZF=0).REX.W + 0F 45/rCMOVNE r64, r/m64 AValidN.E.Move if not equal (ZF=0).0F 4E /rCMOVNG r16, r/m16 AValidValidMove if not greater (ZF=1or SF≠ OF).0F 4E /rCMOVNG r32, r/m32 AValidValidMove if not greater (ZF=1or SF≠ OF).REX.W + 0F 4E/rCMOVNG r64, r/m64 AValidN.E.Move if not greater (ZF=1or SF≠ OF).0F 4C /rCMOVNGE r16,r/m16AValidValidMove if not greater or equal(SF≠ OF).0F 4C /rCMOVNGE r32,r/m32AValidValidMove if not greater or equal(SF≠ OF).REX.W + 0F 4C/rCMOVNGE r64,r/m64AValidN.E.Move if not greater or equal(SF≠ OF).0F 4D /rCMOVNL r16, r/m16 AValidValidMove if not less (SF=OF).0F 4D /rCMOVNL r32, r/m32 AValidValidMove if not less (SF=OF).REX.W + 0F 4D/rCMOVNL r64, r/m64 AValidN.E.Move if not less (SF=OF).0F 4F /rCMOVNLE r16,r/m16AValidValidMove if not less or equal(ZF=0 and SF=OF).0F 4F /rCMOVNLE r32,r/m32AValidValidMove if not less or equal(ZF=0 and SF=OF).REX.W + 0F 4F/rCMOVNLE r64,r/m64AValidN.E.Move if not less or equal(ZF=0 and SF=OF).0F 41 /rCMOVNO r16, r/m16 AValidValidMove if not overflow(OF=0).0F 41 /rCMOVNO r32, r/m32 AValidValidMove if not overflow(OF=0).CMOVcc—Conditional MoveVol.
2A 3-153INSTRUCTION SET REFERENCE, A-MOpcodeInstructionREX.W + 0F 41/r64-BitModeCompat/ DescriptionLeg ModeCMOVNO r64, r/m64 AValidN.E.Move if not overflow(OF=0).0F 4B /rCMOVNP r16, r/m16 AValidValidMove if not parity (PF=0).0F 4B /rCMOVNP r32, r/m32 AValidValidMove if not parity (PF=0).REX.W + 0F 4B/rCMOVNP r64, r/m64 AValidN.E.Move if not parity (PF=0).0F 49 /rCMOVNS r16, r/m16 AValidValidMove if not sign (SF=0).0F 49 /rCMOVNS r32, r/m32 AValidValidMove if not sign (SF=0).REX.W + 0F 49/rCMOVNS r64, r/m64 AValidN.E.Move if not sign (SF=0).0F 45 /rCMOVNZ r16, r/m16 AValidValidMove if not zero (ZF=0).0F 45 /rCMOVNZ r32, r/m32 AValidValidMove if not zero (ZF=0).REX.W + 0F 45/rCMOVNZ r64, r/m64 AValidN.E.Move if not zero (ZF=0).0F 40 /rCMOVO r16, r/m16AValidValidMove if overflow (OF=0).0F 40 /rCMOVO r32, r/m32AValidValidMove if overflow (OF=0).REX.W + 0F 40/rCMOVO r64, r/m64AValidN.E.Move if overflow (OF=0).0F 4A /rCMOVP r16, r/m16AValidValidMove if parity (PF=1).0F 4A /rCMOVP r32, r/m32AValidValidMove if parity (PF=1).REX.W + 0F 4A/rCMOVP r64, r/m64AValidN.E.Move if parity (PF=1).0F 4A /rCMOVPE r16, r/m16 AValidValidMove if parity even (PF=1).0F 4A /rCMOVPE r32, r/m32 AValidValidMove if parity even (PF=1).REX.W + 0F 4A/rCMOVPE r64, r/m64 AValidN.E.Move if parity even (PF=1).0F 4B /rCMOVPO r16, r/m16 AValidValidMove if parity odd (PF=0).0F 4B /rCMOVPO r32, r/m32 AValidValidMove if parity odd (PF=0).REX.W + 0F 4B/rCMOVPO r64, r/m64 AValidN.E.Move if parity odd (PF=0).0F 48 /rCMOVS r16, r/m16AValidValidMove if sign (SF=1).0F 48 /rCMOVS r32, r/m32AValidValidMove if sign (SF=1).REX.W + 0F 48/rCMOVS r64, r/m64AValidN.E.Move if sign (SF=1).0F 44 /rCMOVZ r16, r/m16AValidValidMove if zero (ZF=1).3-154 Vol.
2AOp/EnCMOVcc—Conditional MoveINSTRUCTION SET REFERENCE, A-MOpcodeInstructionOp/En64-BitModeCompat/ DescriptionLeg Mode0F 44 /rCMOVZ r32, r/m32AValidValidMove if zero (ZF=1).REX.W + 0F 44/rCMOVZ r64, r/m64AValidN.E.Move if zero (ZF=1).Instruction Operand EncodingOp/EnOperand 1Operand 2Operand 3Operand 4AModRM:reg (r, w)ModRM:r/m (r)NANADescriptionThe CMOVcc instructions check the state of one or more of the status flags in theEFLAGS register (CF, OF, PF, SF, and ZF) and perform a move operation if the flags arein a specified state (or condition).