指令类型

助记符

(带*为特权指令)

对标志寄存器的影响

备注

说明

举例

ZF

CF

PF

SF

OF

AF

DF

IF

TF

数据传送类

数据传送

MOV

不影响标志位

Move

MOV r/m32,imm32

MOV*

Move to/from Control Registers

MOV CR0,r32

MOV*

Move to/from Debug Registers

MOV r32, DR0-DR7

符号位扩展传送

MOVZX

Move with Zero-Extend

MOVZX r32,r/m16

MOVSX

Move with Sign-Extension

MOVSX r32,r/m16

数据交换

XCHG

Exchange Register/Memory with Register

XCHG r32,r/m32

CMPXCHG

Compare and Exchange

CMPXCHG r/m32,r32

CMPXCHG8B

Compare and Exchange 8 Bytes

CMPXCHG8B m64

堆栈传送

PUSH

不影响标志位

Push Word or Doubleword Onto the Stack

Push r/m32

POP

Pop a Value from the Stack

POP r.m32

PUSHA

Push All General-Purpose Registers

PUSHA

POPA

Pop All General-Purpose Registers

POPA

PUSHAD

Push All General-Purpose Registers

PUSHAD

POPAD

Pop All General-Purpose Registers

POPAD

地址传送

LEA

Load Effective Address

LEA r32,m

LDS

Load Far Pointer

LDS r32,m16:32

LES

Load Far Pointer

LES r32,m16:32

LFS

Load Far Pointer

LFS r32,m16:32

LGS

Load Far Pointer

LGS r32,m16:32

LSS

Load Far Pointer

LSS r32,m16:32

标志寄存器传送

LAHF

不影响标志位

Load Status Flags into AH Register

LAHF

SAHF

标志寄存器低八位的内容由AH的值决定

Store AH into Flags

SAHF

PUSHF

不影响标志位

Push EFLAGS Register onto the Stack

PUSHF

POPF

标志寄存器的内容由装入的具体值决定

Pop Stack into EFLAGS Register

POPF

PUSHFD

不影响标志位

Push EFLAGS Register onto the Stack

PUSHFD

POPFD

标志寄存器的内容由装入的具体值决定

Pop Stack into EFLAGS Register

POPFD

查表

XLAT

不影响标志位

Table Look-up Translation

XLAT m8

XLATB

Table Look-up Translation

XLATB

输入输出

IN*

不影响标志位

Input from Port

IN EAX,imm8

OUT*

Output to Port

OUT imm8, EAX

输入

INS*

不影响标志位

Input from Port to String

INS m32, DX

INSB*

Input from Port to String

INSB

INSW*

Input from Port to String

INSW

INSD*

Input from Port to String

INSD

输出

OUTS*

Output String to Port

OUTS DX, m32

OUTSB*

Output String to Port

OUTSB

OUTSW*

Output String to Port

OUTSW

OUTSD*

Output String to Port

OUTSD

传送

MOVS

Move Data from String to String

MOVS m32, m32

MOVSB

Move Data from String to String

MOVSB

MOVSW

Move Data from String to String

MOVSW

MOVSD

Move Data from String to String

MOVSW

比较

CMPS

由计算结果确定标志位的值

不会影响DF,IF,TF

Compare String Operands

CMPS m32, m32

CMPSB

Compare String Operands

CMPSB

CMPSW

Compare String Operands

CMPSW

CMPSD

Compare String Operands

CMPSD

搜索

SCAS

不会影响DF,IF,TF

Scan String

SCAS m32

SCASB

Scan String

SCASB

SCASW

Scan String

SCASW

SCASD

Scan String

SCASD

装入

LODS

不影响标志位

Load String

LODS m32

LODSB

Load String

LODSB

LODSW

Load String

LODSW

LODSD

Load String

LODSD

填充

STOS

Store String

STOS m32

STOSB

Store String

STOSB

STOSW

Store String

STOSW

STOSD

Store String

STOSD

循环前缀

REP

Repeat String Operation Prefix

REP MOVS m32,m32

REPZ

Repeat String Operation Prefix

REPZ LODS EAX

REPNZ

Repeat String Operation Prefix

REPNZ STOS m32

REPE

Repeat String Operation Prefix

REPE CMPS m32,m32

REPNE

Repeat String Operation Prefix

REPNE SCAS m32

条件传送

标志位测试

CMOVZ/CMOVNZ

1/0

指出测试的标志位,下同

Move if zero

CMOVE/CMOVNE

1/0

Move if equal

CMOVC/CMOVNC

1/0

Move if carry

CMOVS/CMOVNS

1/0

Move if sign

CMOVO/CMOVNO

1/0

Move if overflow

CMOVP/CMOVNP

1/0

Move if parity

CMOVPE/CMOVPO

1/0

Move if parity even/odd

无符号数比较

CMOVA/CMOVNBE

0&

&0

ZF=0 AND CF=0

Move if above

CMOVNA/CMOVBE

1|

|1

ZF=1 OR CF=1

Move if below or equal

CMOVB/CMOVNAE

0&

&1

ZF=0 AND CF=1

Move if below

CMOVNB/CMOVAE

1|

|0

ZF=1 OR CF=0

Move if above or equal

有符号数比较

CMOVG/CMOVNLE

0&

&=

=

ZF=0 AND SF=OF

Move if greater

CMOVNG/CMOVLE

1|

|<

>

ZF=1 OR SF<>OF

Move if less or equal

CMOVL/CMOVNGE

<

>

SF<>OF

Move if less

CMOVNL/CMOVGE

=

=

SF=OF

Move if greater or equal

条件设置

标志位测试

SETZ/SETNZ

1/0

指出测试的标志位,下同

Set byte if zero

SETE/SETNE

1/0

Set byte if equal

SETC/SETNC

1/0

Set byte if carry

SETS/SETNS

1/0

Set byte if sign

SETO/SETNO

1/0

Set byte if overflow

SETP/SETNP

1/0

Set byte if parity

SETPE/SETPO

1/0

Set byte if parity even/odd

无符号数比较

SETA/SETNBE

0&

&0

ZF=0 AND CF=0

Set byte if above

SETNA/SETBE

1|

|1

ZF=1 OR CF=1

Set byte if below or equal

SETB/SETNAE

0&

&1

ZF=0 AND CF=1

Set byte if below

SETNB/SETAE

1|

|0

ZF=1 OR CF=0

Set byte if above or equal

有符号数比较

SETG/SETNLE

0&

&=

=

ZF=0 AND SF=OF

Set byte if greater

SETNG/SETLE

1|

|<

>

ZF=1 OR SF<>OF

Set byte if less or equal

SETL/SETNGE

<

>

SF<>OF

Set byte if less

SETNL/SETGE

=

=

SF=OF

Set byte if greater or equal

读取

SGDT

不影响标志位

Store Global Descriptor Table Register

SGDT m

SIDT

Store Interrupt Descriptor Table Register

SIDT m

SLDT

Store Local Descriptor Table Register

SLDT r/m32

SMSW

Store Machine Status Word

SMSW r32/m16

STR

Store Task Register

STR r/m16

RDMSR*

Read from Model Specific Register

RDMSR

RDPMC*

Read Performance-Monitoring Counters

RDPMC

写入

LGDT*

Load Global Descriptor Table Register

LGDT m16&32

LIDT*

Load Interrupt Descriptor Table Register

LIDT m16&32

LLDT*

Load Local Descriptor Table Register

LLDT r/m16

LMSW*

Load Machine Status Word

LMSW r/m16

LTR*

Load Task Register

LTR r/m16

WRMSR*

Write to Model Specific Register

WRMSR

LAR(*)

 

 

 

 

 

 

 

 

Load Access Rights Byte

LAR r32,r/m32

LSL(*)

 

 

 

 

 

 

 

 

Load Segment Limit

LSL r32,r/m32

算术运算类

加法

ADD

Add

ADD r/m32,imm32

ADC

Add with Carry

ADC r/m32,imm32

INC

Increment by 1

INC r/m32

AAA

?表示不确定或者未定义

ASCII Adjust After Addition

AAA

DAA

Decimal Adjust AL after Addition

DAA

XADD

Exchange and Add

XADD r/m32,r32

减法

SUB

Subtract

SUB r/m32,imm32

SBB

Integer Subtraction with Borrow

SBB r/m32,imm32

DEC

Decrement by 1

DEC r/m32

AAS

ASCII Adjust AL After Subtraction

AAS

DAS

Decimal Adjust AL after Subtraction

DAS

乘法

MUL

Unsigned Multiply

MUL r/m32

IMUL

Signed Multiply

IMUL r32,r/m32,imm32

AAM

ASCII Adjust AX After Multiply

AAM

除法

DIV

此指令可能会产生中断,故影响IF,TF

Unsigned Divide

DIV r/m32

IDIV

同上

Signed Divide

IDIV r/m32

AAD

ASCII Adjust AX Before Division

AAD

求负

NEG

CF同源操作数的真或假

Two's Complement Negation

NEG r/m32

符号位扩展

CBW

不影响标志位

Convert Byte to Word

CBW

CWDE

Convert Word to Doubleword

CWDE

CWD

Convert Word to Doubleword

CWD

CDQ

Convert Double to Quadword

CDQ

比较

CMP

由计算结果确定标志位的值

不会影响到DF,IF,TF

Compare Two Operands

CMP r/m32,imm32

逻辑运算类

移位

SHL

OF标志位只在移位次数是1时有效

Shift left imm8/CL times

SHL r/m32,imm8

SHR

Shift right imm8/CL times

SHR r/m32,imm8

SAL

Shift left without sign bit imm8/CL times

SAL r/m32,imm8

SAR

Shift right without sign bit mm8/CL times

SAR r/m32,imm8

SHLD

Double Precision Shift Left

SHLD r/m32,r32,imm8

SHRD

Double Precision Shift Right

SHRD r/m32,r32,imm8

循环

移位

ROL

Rotate left imm8/CL times

ROL r/m32,imm8

ROR

Rotate right imm8/CL times

ROR r/m32,imm8

RCL

Rotate left with CF imm8/CL times

RCL r/m32,imm8

RCR

Rotate right with CF imm8/CL times

RCR r/m32,imm8

调整字节序

BSWAP

不影响标志位

Byte Swap

BSWAP r32

求反

NOT

One's Complement Negation

NOT r/m32

AND

0

0

Logical AND

AND r/m32,r/m32

OR

0

0

Logical Inclusive OR

OR r/m32,r/m32

异或

XOR

0

0

Logical Exclusive OR

XOR r/m32,r/m32

检测

TSET

0

0

Logical Compare

TEST r/m32,r/m32

位操作类

标志位操作

CLC

置CF=0

Clear Carry Flag

CLC

CMC

使CF取反

Complement Carry Flag

CMC

STC

置CF=1

Set Carry Flag

STC

CLD

置DF=0

Clear Direction Flag

CLD

STD

置DF=1

Set Direction Flag

STD

CLI*

置IF=0

Clear Interrupt Flag

CLI

STI*

置IF=1

Set Interrupt Flag

STI

CLTS*

清空CR0中的TS标志

Clear Task-Switched Flag in CR0

CLTS

位测试

BT

Bit Test

BT r/m32,imm8

BTC

Bit Test and Complement

BTC r/m32,imm8

BTR

Bit Test and Reset

BTR r/m32,imm8

BTS

Bit Test and Set

BTS r/m32,imm8

位扫描

BSF

Bit Scan Forward

BSF r32,r/m32

BSR

Bit Scan Reverse

BSR r32,r/m32

程序控制类

无条件转移

JMP

不影响标志位

Jump

寄存器测试

JCXZ

Jump short if CX=0

JECXZ

Jump short if ECX=0

标志位测试

JZ/JNZ

1/0

指出测试的标志位,下同

Jump short if zero

JE/JNE

1/0

Jump short if equal

JC/JNC

1/0

Jump short if carry

JS/JNS

1/0

Jump short if sign

JO/JNO

1/0

Jump short if overflow

JP/JNP

1/0

Jump short if parity

JPE/JPO

1/0

Jump short if parity even/odd

无符号数比较

JA/JNBE

0&

&0

ZF=0 AND CF=0

Jump short if above

JNA/JBE

1|

|1

ZF=1 OR CF=1

Jump short if below or equal

JB/JNAE

0&

&1

ZF=0 AND CF=1

Jump short if below

JNB/JAE

1|

|0

ZF=1 OR CF=0

Jump short if above or equal

有符号数比较

JG/JNLE

0&

&=

=

ZF=0 AND SF=OF

Jump short if greater

JNG/JLE

1|

|<

>

ZF=1 OR SF<>OF

Jump short if less or equal

JL/JNGE

<

>

SF<>OF

Jump short if less

JNL/JGE

=

=

SF=OF

Jump short if greater or equal

循环控制

LOOP

不影响标志位

Jump short if ECX=0

LOOP rel8

LOOPZ

Jump short if ECX=0 and ZF=1

LOOPZ rel8

LOOPNZ

Jump short if ECX=0 and ZF=0

LOOPNZ rel8

LOOPE

Jump short if ECX=0 and ZF=1

LOOPE rel8

LOOPNE

Jump short if ECX=0 and ZF=0

LOOPNE rel8

中断与返回

INT

根据不同情况影响标志位

Call to Interrupt Procedure

INT imm8

INT1

Call to Interrupt Procedure

INT1

INT3

Call to Interrupt Procedure

INT3

INTO

Call to Interrupt Procedure

INTO

IRET

影响所有标志位

标志位到恢复中断以前的状态

Interrupt Return

IRET

IRETW

Interrupt Return Word

IRETW

IRETD

Interrupt Return Doubleword

IRETD

系统调用与返回

SYSENTER

不影响标志位

System Enter

SYSENTER

SYSLEAVE

System Leave

SYSLEAVE

函数调用与返回

CALL

如果发生任务切换则影响所有

Call Procedure

CALL m16:32

RET

Return from Procedure

RET imm16

RETN

Return from Procedure to Near

RETN imm16

RETF

Return from Procedure to Far

RETF imm16

CPU控制类

空操作

NOP

不影响标志位

No Operation

NOP

暂停

HLT*

Stop instruction execution and Halt

HLT

等待协处理器

WAIT

Check pending unmasked floating-point exceptions

WAIT

交权给协处理器

ESC

Escape

ESC EXTOPRD,OPRD

总线锁定前缀

LOCK

Assert LOCK# Signal Prefix

LOCK

清除内部缓存

INVD*

Invalidate Internal Caches

INVD

刷新内部缓存

WBINVD*

Write Back and Invalidate Cache

WBINVD

清除旁路翻译缓存

INVLPG*

Invalidate TLB Entry

INVLPG m

脱离系统管理模式

RSM

Resume from System Management Mode

RSM

杂项

段寄存器读检测

VERR

Verify a Segment for Reading

VERR r/m16

段寄存器写检测

VERW

Verify a Segment for Writing

VERW r/m16

高级语言辅助

ENTER

不影响标志位

Make Stack Frame for Procedure Parameters

ENTER imm16,imm8

LEAVE

High Level Procedure Exit

LEAVE

检验并调整RPL

ARPL

Adjust RPL Field of Segment Selector

ARPL r/m16,r16

数组边界检查

BOUND

Check Array Index Against Bounds

BOUND r32,m32&32

识别CPU

CPUID

CPU Identification

CPUID

读取时间戳

RDTSC(*)

Read Time-Stamp Counter

RDTSC

未定义

UD2

Undefined Instruction

UD2

协处理器类

传送

加法

减法

乘法

除法

等待

FWAIT

 

浮点

F2XM1 FABS FADD FADDP FBLD FBSTP FCHS FCLEX FCOM FCOMP FCOMPP

FCOS FDECSTP FDISI FDIV FDIVP FDIVR FDIVRP FENI FFREE FIADD

FICOM FICOMP FIDIV FIDIVR FILD FIMUL FINCSTP FINIT FIST FISTP

FISUB FISUBR FLD FLD1 FLDL2E FLDL2T FLDCW FLDENV FLDLG2 FLDLN2

FLDPI FLDZ FMUL FMULP FNCLEX FNDISI FNENI FNINIT FNOP FNSAVE

FNSTCW FNSTENV FNSTSW FPATAN FPREM FPREM1 FPTAN FRNDINT FRSTOR

FSAVE FSCALE FSETPM FSIN FSINCOS FSQRT FST FSTCW FSTENV FSTP

FSTSW FSUB FSUBP FSUBR FSUBRP FTST FUCOM FUCOMP FUCOMPP FWAIT

FXAM FXCH FXTRACT FYL2X FYL2XP1

 

 

 

 

 

CF(Carry Flag):进位标志。当指令执行的结果(8位或16位)在最高位上产生了一个进位或借位时,CF =1。

AF(Auxiliary Carry Flag):辅助进位标志。当一个8位数(或16位数)的低四位向高四位(即b3向b4)有进位或借位时,AF=1。常用于十进制算术运算指令。

OF(Overflow Flag): 溢出标志。在算术运算中,带符号数的运算结果超出了8位或16位符号数所能表示的范围时,OF=1。

ZF(Zero Flag): 零标志。当运算结果为全零时,ZF=1。

SF(Sign Flag): 符号标志。当运算结果为正数,即结果的最高位为0时,SF=1。

PF(Parity Flag):奇偶标志。当算术逻辑运算的结果中1的个数为偶数时,PF=1,为奇数时,PF=0。

DF(Direction Flag):方向标志。用于控制数据串操作指令的步进方向,当DF=1时,表示从高地址向低地址以递减的顺序对数据串中的数据进行处理。

IF(Interrupt-enable Flag):中断允许标志。当IF=1时,CPU可以响应外部可屏蔽中断请求。该标志可以用指令设置为1或0。

TF(Trap Flag):陷阱标志。当TF=1时,CPU进入单步工作方式,每执行完一条指令就自动产生一个内部中断,以便进行程序调试。当TF=0时,正常执行程序。

win32 指令大全的更多相关文章

  1. Linux日常使用指令大全

    Linux日常使用指令大全 Java代码 www.ahlinux.com 001.日常维护常用查询命令 #top    显示系统进程 #clear  清理屏幕信息 #cat /etc/redhat-r ...

  2. linux指令大全(完整篇)(转)

       http://blog.chinaunix.net/uid-9681606-id-1998590.html  linux指令大全(完整篇)(转) 2009-03-17 01:21:46 分类:  ...

  3. Linux学习笔记之vim操作指令大全

    0x00 关于Vim Vim是款强大的文本编辑器,但是众多指令需要学习,这次记录了指令大全方便以后翻阅. Vim的几种模式 正常模式:可以使用快捷键命令,或按:输入命令行. 插入模式:可以输入文本,在 ...

  4. Linux超全实用指令大全

    参考 Linux超全实用指令大全

  5. Linux 指令大全

    作为一个小前端,以前有我们的运维大神在的时候,要给服务器做什么配置的时候就找他(那时幸福到哭),如今他走了,公司也没招人(想把这个钱省下来,让我发现了,毕竟我能当小运维用,虽然很这方面很渣渣,哈哈,偷 ...

  6. IL指令大全(转)

    名称 说明 Add 将两个值相加并将结果推送到计算堆栈上. Add.Ovf 将两个整数相加,执行溢出检查,并且将结果推送到计算堆栈上. Add.Ovf.Un 将两个无符号整数值相加,执行溢出检查,并且 ...

  7. angular指令大全

    这篇文章的案例都是来自官方,引用的cdn来自bootcss, 因为angular的官方网站被屏了, 所以要翻, 不过我把整个文档下回来了,方便大家下载可以点击: 打开下载英文版 angular的指令 ...

  8. IL指令大全

    IL是.NET框架中中间语言(Intermediate Language)的缩写.使用.NET框架提供的编译器可以直接将源程序编译为.exe或.dll文件,但此时编译出来的程序代码并不是CPU能直接执 ...

  9. Angualar:指令大全

    指令: 内置渲染指令 内置事件指令 内置节点指令 自定义指令 restrict template replace属性 templateUrl属性 trnsclude priorty terminal属 ...

随机推荐

  1. Linux性能查看与分析--命令行工具介绍

    本文介绍工作中常用的几个linux性能查看命令:top,sar,vmstat,iostat,pidstat等. 1.top top是最常用的linux性能分析工具,它能够实时的显示系统中各个进程的资源 ...

  2. 【Java架构学习】Model1和Model2讨论

    在Java的学习中.这两个词的频率出现的非常高.那就是Model1和Model2.那么到底什么是Model1,什么是Model2呢?我们是不是又非常自然接受这两个概念.可是不知道其所以然呢?今天我们就 ...

  3. linux进程间通信消息队列:msgsnd: Invalid argument

    今天写了个消息队列的小测试程序结果send端程序总是出现:msgsnd: Invalid argument,搞了半个小时也没搞明白,后来查资料发现我将(st_msg_buf.msg_type = 0; ...

  4. 【Java】Java代码经典错误清单

    一.String 对照 == 和 equals.详细描写叙述例如以下 "=="操作符的作用 1)用于基本数据类型的比較,例如以下: byte(字节) 8 -128 - 127 0 ...

  5. 【配置关系】—Entity Framework实例详解

    实体间的关系,简单来说无非就是一对一.一对多.多对多,根据方向性来说又分为双向和单向.Code First在实体关系上有以下约定: 1. 两个实体,如果一个实体包含一个引用属性,另一个实体包含一个集合 ...

  6. POJ 1703 Find them, Catch them(种类并查集)

    题目链接 这种类型的题目以前见过,今天第一次写,具体过程,还要慢慢理解. #include <cstring> #include <cstdio> #include <s ...

  7. 新拿到的app跑的时候出现问题

    连接器链接失败,是因为对应类build后的中间产物.o文件没有生成,对应架构下,用模拟器跑的,很可能是因为无法编译产出x86,或i386架构的中间产物,所以linker链接转换机器码时候找不到对应的中 ...

  8. FMDB 使用技巧

    源链接:  http://blog.csdn.net/iunion/article/details/7091744 - (BOOL) isTableOK:(NSString *)tableName{  ...

  9. eclipse安装lombok和常用注解使用

    1.下载lombok.jar lombok 的官方网址:http://projectlombok.org/   2.运行lombok.jar: java -jar  D:\eclipse-luna\l ...

  10. [USACO2007 Demo] Cow Acrobats

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1629 [算法] 贪心 考虑两头相邻的牛 , 它们的高度值和力量值分别为ax , ay ...