遇君阁

前不见古人,后不见来者
念天地之悠悠,独怆然而涕下

  VC知识库BLOG :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 登录 ::
  26 随笔 :: 8 文章 :: 53 评论 :: 0 Trackbacks
<2008年10月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

留言簿(0)

随笔分类

随笔档案

文章分类

文章档案

相册

相关链接

搜索

最新评论

阅读排行榜

评论排行榜

2008年5月14日 #

有一次我在VS中遇到这样的一个编译错误,代码如下(程序1):
typedef char * string;

class A
{
private:
 char value[256];
public:
 const string getValue() const
 {
  return value;
 }
};

int _tmain(int argc, _TCHAR* argv[])
{
 return 0;
}
编译错误:error C2440: 'return' : cannot convert from 'const char [256]' to 'const string'
为什么会有这样的编译错误呢?不是数组名可以转换成一个指针吗(此主题可参考),按此原理类推应该可以实现此类型转换。于是我改写代码(程序2):
typedef char * string;

class A
{
private:
 char value[256];
public:
 const char * getValue() const
 {
  return value;
 }
};

int _tmain(int argc, _TCHAR* argv[])
{
 return 0;
}
这时编译这段代码却没有错误乐。为什么呢?原因在于在程序1中const从整体上修饰类型别名string(char *),那么就相当于char * const,表示char类型的指针为常量,所以就出现上述的编译错误。错误的根本原因就是我把typedef主观认为可以与#define等同,而typedef实际上却是定义一种类型的别名,而不只是简单的宏替换。这次经历也告诉我一个道理:不能凭主观或者说错误的观点进行推测,而应该认识到实践才是检验真理的唯一标准。

发表于 2008-05-14 12:55 遇君阁 阅读(1170) | 评论 (5)编辑 收藏

2008年5月12日 #

In word, you can use the ALT+X keyboard shortcut to enter the character directly in your document.
  1. Type the Unicode (hexadecimal) value of the character.

    Note  The value string can also begin with U+.

  2. Press ALT+X.

    Microsoft Word replaces the string to the left of the insertion point with the character you specified.

发表于 2008-05-12 12:55 遇君阁 阅读(1397) | 评论 (4)编辑 收藏

2008年5月7日 #

字节对齐的目的是什么?
1.增加内存利用率
2.增加程序的运行效率
但这两点有时候在内存对齐时却是相互违背的。比如我们来对比下面的程序,在此之前声明一下我的环境,x86(P4),VC 2005:
程序1
#pragma pack(4)
class A
{
public:
 char a;
 int aa;

};

程序2
#pragma pack(1)
class B
{
public:
 char a;
 int aa;

};
类A的size是8,而B的size是5,A相对于B来说浪费了内存空间,但同时我们还要看看对于A和B中的成员aa,aa的地址在类A中是可以被4整除(即:addr(A::aa)%4=0),而aa在类B中由于内存对齐方式是1,所以aa的地址无法被4整除(即:addr(A::aa)%4!=0).那么由于在x86(32位)上,从无法被4整除的地址边界去访问变量,会影响效率,具体原因已经超出了本文的讨论范围,以后用另一篇文章讨论.这里只放一个测试用例,如果有兴趣的朋友可以运行一下(VC 2005):
测试用例1:
inline   unsigned   __int64   GetCycleCount(void)  
{  
      _asm         _emit   0x0F  
      _asm         _emit   0x31  
}

int _tmain(int argc, _TCHAR* argv[])
{
 long long l = 3000000000000;

 unsigned   __int64 begin = GetCycleCount();
 
 for(long long i = 1000000000; i > 0; i--)
 {
  // Empty the cache in CPU.
  l--;
  // Access the memory as the address can be divided by 4
  __asm
  {
   
   mov ecx,dword ptr [l]
  }
 }
 
 unsigned   __int64 end = GetCycleCount();
 printf("The elapse time is:%I64d\n", end - begin);
 return 0;
}
测试用例2:
inline   unsigned   __int64   GetCycleCount(void)  
{  
      _asm         _emit   0x0F  
      _asm         _emit   0x31  
}

int _tmain(int argc, _TCHAR* argv[])
{
 long long l = 3000000000000;

 unsigned   __int64 begin = GetCycleCount();
 
 for(long long i = 1000000000; i > 0; i--)
 {
  // Empty the cache in CPU.
  l--;
  // Access the memory as the address can not be divided by 4
  __asm
  {
   
   mov ecx,dword ptr [l+1]
  }
 }
 
 unsigned   __int64 end = GetCycleCount();
 printf("The elapse time is:%I64d\n", end - begin);
 return 0;
}
比较测试用例1与测试用例2打印出来的时间,你就可以从直观上得到访问奇地址时效率上的损失.
所以我的结论是:
在使用字节对齐时,请仔细考虑你要的是效率还是要的是内存,并在写程序时注意。

发表于 2008-05-07 11:28 遇君阁 阅读(1332) | 评论 (4)编辑 收藏

2008年4月25日 #

详细设计时应该注意的Item:
条款03:尽可能使用const
Use const whenever possible.
条款18:让接口容易被正确使用,不易被误用
Make interfaces easy to use correctly and hard to use incorrectly.
条款19:设计class犹如设计type
Treat class design as type design.
条款20:宁以pass-by-reference-to-const替换pass-by-value
Prefer pass-by-reference-to-const to pass-by-value.
条款21:必须返回对象时,别妄想返回其reference
Don't try to return a reference when you must return an object.
条款22:将成员变量声明为private
Declare data members private.
条款23:宁以non-member、non-friend替换member函数
Prefer non-member non-friend functions to member functions.
条款24:若所有参数皆需类型转换,请为此采用non-member函数
Declare non-member functions when type conversions should apply to all parameters.
条款28:避免返回handles指向对象内部成分
Avoid returning "handles" to object internals.
条款32:确定你的public继承塑模出is-a关系
Make sure public inheritance models "is-a."
条款34:区分接口继承和实现继承
Differentiate between inheritance of interface and inheritance of implementation.
条款35:考虑virtual函数以外的其他选择
Consider alternatives to virtual functions.
条款36:绝不重新定义继承而来的non-virtual函数
Never redefine an inherited non-virtual function.
条款37:绝不重新定义继承而来的缺省参数值
Never redefine a function's inherited default parameter value.
条款38:通过复合塑模出has-a或"根据某物实现出"
Model "has-a" or "is-implemented-in-terms-of" through composition.
条款39:明智而审慎地使用private继承
Use private inheritance judiciously.
条款40:明智而审慎地使用多重继承
Use multiple inheritance judiciously.

写代码时应该注意的Item:
条款02:尽量以const, enum, inline替换 #define
Prefer consts,enums, and inlines to #defines.
条款04:确定对象被使用前已先被初始化
Make sure that objects are initialized before they're used.
条款05:了解C++ 默默编写并调用哪些函数
Know what functions C++ silently writes and calls.
条款06:若不想使用编译器自动生成的函数,就该明确拒绝
Explicitly disallow the use of compiler-generated functions you do not want.
条款07:为多态基类声明virtual析构函数
Declare destructors virtual in polymorphic base classes.
条款09:绝不在构造和析构过程中调用virtual函数
Never call virtual functions during construction or destruction.
条款10:令operator= 返回一个reference to *this
Have assignment operators return a reference to *this.
条款11:在operator= 中处理“自我赋值”
Handle assignment to self in operator=.
条款12:复制对象时勿忘其每一个成分
Copy all parts of an object.
条款25:考虑写出一个不抛异常的swap函数
Consider support for a non-throwing swap.
条款26:尽可能延后变量定义式的出现时间
Postpone variable definitions as long as possible.
条款27:尽量少做转型动作
Minimize casting.
条款30:透彻了解inlining的里里外外
Understand the ins and outs of inlining.
条款31:将文件间的编译依存关系降至最低
Minimize compilation dependencies between files.
条款33:避免遮掩继承而来的名称
Avoid hiding inherited names.

异常应该注意的Item:
条款08:别让异常逃离析构函数
Prevent exceptions from leaving destructors.
条款29:为“异常安全”而努力是值得的
Strive for exception-safe code.

资源管理
条款13:以对象管理资源
Use objects to manage resources.
条款14:在资源管理类中小心coping行为
Think carefully about copying behavior in resource-managing classes.
条款15:在资源管理类中提供对原始资源的访问
Provide access to raw resources in resource-managing classes.
条款16:成对使用new和delete时要采取相同形式
Use the same form in corresponding uses of new and delete.
条款17:以独立语句将newed对象置入智能指针
Store newed objects in smart pointers in standalone statements.
条款49:了解new-handler的行为
Understand the behavior of the new-handler.
条款50:了解new和delete的合理替换时机
Understand when it makes sense to replace new and delete.
条款51:编写new和delete时需固守常规
Adhere to convention when writing new and delete.
条款52:写了placement new也要写placement delete
Write placement delete if you write placement new.

模板与泛型编程
条款41:了解隐式接口和编译期多态
Understand implicit interfaces and compile-time polymorphism.
条款42:了解typename的双重意义
Understand the two meanings of typename.
条款43:学习处理模板化基类内的名称
Know how to access names in templatized base classes.
条款44:将与参数无关的代码抽离templates
Factor parameter-independent code out of templates.
条款45:运用成员函数模板接受所有兼容类型
Use member function templates to accept "all compatible types."
条款46:需要类型转换时请为模板定义非成员函数
Define non-member functions inside templates when type conversions are desired.
条款47:请使用traits classes表现类型信息
Use traits classes for information about types.
条款48:认识template元编程
Be aware of template metaprogramming.

杂项
条款01:视C++ 为一个语言联邦
View C++ as a federation of languages
条款53:不要轻忽编译器的警告
Pay attention to compiler warnings.
条款54:让自己熟悉包括TR1在内的标准程序库
Familiarize yourself with the standard library, including TR1.
条款55:让自己熟悉Boost
Familiarize yourself with Boost.

我个人感觉原来的目录容易理解,却不容易记忆。因为很大一部分的人看过Effective C++或者都还没有全部看完这本书,可他们都感觉虽然暂时理解了但没有办法一下把书里面所有的知识都应用于实践,所以我觉得如果是这样还不如在看过书以后对其进行纯记忆,以后再慢慢理解融会贯通进行使用,这样的效果更加明显。这也是我为什么重新划分原书目录的原因--暂时的理解不如先记忆后理解,希望对大家有用.

发表于 2008-04-25 14:24 遇君阁 阅读(700) | 评论 (2)编辑 收藏

2008年4月24日 #

1. 一维数组

如:int array[100];

array这个数组名可以转换成指向这个一维数组的指针,所以

int * p = array + 1;              //array 转换成指针

int * foo(int * ptr);

{

return array;        //array 转换成指针

}

foo(array);                   //array 转换成指针

 

2. 二维数组

如:int array[10][20];

array这个数组名也可以转换成一个指针,但它的类型不是int **(指针的指针),而是一个指向一维数组的指针,这个一维数组拥有20个元素。所谓二维数组其实就是数组的数组,所以二维数组名解释为指向数组的指针是合理的。所以

int (*p)[20] = array;             // array 转换成指向一维数组的指针

typedef int (*T)[20];

T foo(int  ptr[][20])

{

return array;        // array 转换成指向一维数组的指针

}

 

T foo1(int  (*ptr)[20])

{

return array;        // array 转换成指向一维数组的指针

}

 

foo(array);                   // array 转换成指向一维数组的指针

      二维数组的定义可以参考: http://blog.vckbase.com/eyesonyhm/articles/23500.html

3. 三维数组

同理……

 

注意:阿

数组≠指针。

数组名是一个常量指针。

发表于 2008-04-24 09:06 遇君阁 阅读(629) | 评论 (2)编辑 收藏

2008年4月23日 #

Intel奔腾指令速查手册

资料来源:IA-32 Intel Architecture Software Developer Manual Volume 2 : Instruction Set Reference


指令名称 指令形式 机器码 标志位
(设置/测试)
说    明 应用举例
ES: ES: 26   ES段跨越前缀  
CS: CS: 2E   CS段跨越前缀  
SS: SS: 36   SS段跨越前缀  
DS: DS: 3E   DS段跨越前缀  
FS: FS: 64   FS段跨越前缀  
GS: GS: 65   GS段跨越前缀  
Opsize: Opsize: 66   操作数类型跨越前缀  
Address: Address: 67   地址类型跨越前缀  


点击这里:查看下表中所使用符号的说明


指令名称 指令形式 机器码 标志位(设置/测试) 说    明 应用举例
AAA AAA 37 设置 AF CF 加法后的ASCII码调整AL AAA
AAD AAD D5 0A 或 D5 ib 设置 SF ZF PF 除法前的ASCII码调整AX AAD
AAM AAM D4 0A 或 D4 ib 设置 PF SF ZF 乘法后的ASCII码调整AX AAM
AAS AAS 3F 设置 AF CF 减法后的ASCII码调整AL AAS
ADC ADC AL, imm8 14 ib 设置 AF CF OF SF PF ZF 带进位加法 ADC AL, 1F
ADC AX, imm16 15 iw ADC AX, 4F80
ADC EAX, imm32 15 id ADC EAX, 00004F80
ADC r/m8, imm8 80 /2 ib ADC BYTE PTR [006387EA], 39
ADC r/m16,imm16 81 /2 iw ADC WORD PTR [006387EA], 1039
ADC r/m32,imm32 81 /2 id ADC DWORD PTR [006387EA], 00001039
ADC r/m16,imm8 83 /2 ib ADC WORD PTR [006387EA], 39
ADC r/m32,imm8 83 /2 ib ADC DWORD PTR [006387EA], 39
ADC r/m8,r8 10 /r ADC [006387EA], AL
ADC r/m16,r16 11 /r ADC [006387EA], AX
ADC r/m32,r32 11 / r ADC [006387EA], EAX
ADC r8,r/m8 12 /r ADC AL, [006387EA]
ADC r16,r/m16 13 /r ADC AX, [006387EA]
ADC r32,r/m32 13 /r ADC EAX, [006387EA]
ADD ADD AL, imm8 04 ib 设置 AF CF OF SF PF ZF 加法 ADD AL, 1F
ADD AX, imm16 05 iw ADD AX, 4F80
ADD EAX, imm32 05 id ADD EAX, 00004F80
ADD r/m8, imm8 80 /0 ib ADD BYTE PTR [006387EA], 39
ADD r/m16,imm16 81 /0 iw ADD WORD PTR [006387EA], 1039
ADD r/m32,imm32 81 /0 id ADD DWORD PTR [006387EA], 00001039
ADD r/m16,imm8 83 /0 ib ADD WORD PTR [006387EA], 39
ADD r/m32,imm8 83 /0 ib ADD DWORD PTR [006387EA], 39
ADD r/m8,r8 00 /r ADD [006387EA], AL
ADD r/m16,r16 01 /r ADD [006387EA], AX
ADD r/m32,r32 01 / r ADD [006387EA], EAX
ADD r8,r/m8 02 /r ADD AL, [006387EA]
ADD r16,r/m16 03 /r ADD AX, [006387EA]
ADD r32,r/m32 03 /r ADD EAX, [006387EA]
AND AND AL, imm8 24 ib 设置 CF OF PF SF ZF 逻辑与 AND AL, 1F
AND AX, imm16 25 iw AND AX, 4F80
AND EAX, imm32 25 id AND EAX, 00004F80
AND r/m8, imm8 80 /4 ib AND BYTE PTR [006387EA], 39
AND r/m16,imm16 81 /4 iw AND WORD PTR [006387EA], 1039
AND r/m32,imm32 81 /4 id AND DWORD PTR [006387EA], 00001039
AND r/m16,imm8 83 /4 ib AND WORD PTR [006387EA], 39
AND r/m32,imm8 83 /4 ib AND DWORD PTR [006387EA], 39
AND r/m8,r8 20 /r AND BYTE PTR [006387EA], AL
AND r/m16,r16 21 /r AND WORD PTR [006387EA], AX
AND r/m32,r32 21 /r AND DWORD PTR [006387EA], EAX
AND r8,r/m8 22 /r AND AL, [006387EA]
AND r16,r/m16 23 /r AND AX, [006387EA]
AND r32,r/m32 23 /r AND EAX, [006387EA]
ARPL ARPL r/m16,r16 63 /r 设置 ZF 调整请求特权级 (286+ PM) ARPL AX, BX ;如果AX的RPL小于BX的RPL,则改为BX的RPL,且ZF置1,否则ZF清0
BOUND BOUND r16,m16&16 62 /r 不影响标志位 越界检查 (80188+) BOUND AX, [006387EA] ;如果AX不在[006387EA]及[006387EA+2]的值中间,则产生异常5
BOUND r32,m32&32 BOUND EAX, [006387EA] ;如果EAX不在[006387EA]及[006387EA+4]的值中间,则产生异常5
BSF BSF r16,r/m16 0F BC 设置 ZF 从低到高扫描目标,查找对应为1的位 (386+) BSF AX, BX ;把BX由低到高第一个1的位置送AX,如全0则ZF置1,否则ZF清0
BSF r32,r/m32 BSF EAX, EBX ;把EBX由低到高第一个1的位置送EAX,如全0则ZF置1,否则ZF清0
BSR BSR r16,r/m16 0F BD 设置 ZF 从高到低扫描目标,查找对应为1的位 (386+) BSR AX, BX ;把BX由高到低第一个1的位置送AX,如全0则ZF置1,否则ZF清0
BSR r32,r/m32 BSR EAX, EBX ;把EBX由高到低第一个1的位置送EAX,如全0则ZF置1,否则ZF清0
BSWAP BSWAP reg32 0F C8+rd 不影响标志位 32位寄存器高低字节交换(486+) BSWAP EAX
BT BT r/m16,r16 0F A3 设置 CF 测试目标的指定位 (386+) BT AX, BX ;如果AX中BX指定的位为1,则CF置1,否则CF清0
BT r/m32,r32 0F A3 BT EAX, EBX ;如果EAX中EBX指定的位为1,则CF置1,否则CF清0
BT r/m16,imm8 0F BA /4 BT AX, 01 ;如果AX中01位为1,则CF置1,否则CF清0
BT r/m32,imm8 0F BA /4 BT EAX, 01 ;如果EAX中01位为1,则CF置1,否则CF清0
BTC BTC r/m16,r16 0F BB 设置 CF 将目标指定位取反 (386+) BTC AX, BX ;将AX中BX指定的位取反,CF存放指定位并取反位
BTC r/m32,r32 0F BB BTC EAX, EBX ;将EAX中EBX指定的位取反,CF存放指定位并取反
BTC r/m16,imm8 0F BA /7 BTC AX, 01 ;将AX中01位取反,CF存放指定位并取反
BTC r/m32,imm8 0F BA /7 BTC EAX, 01 ;将EAX中01位取反,CF存放指定位并取反
BTR BTR r/m16,r16 0F B3 设置 CF 将目标指定位清0 (386+) BTR AX, BX ;将AX中BX指定的位清0,CF存放指定位并清0
BTR r/m32,r32 0F B3 BTR EAX, EBX ;将EAX中EBX指定的位清0,CF存放指定位并清0
BTR r/m16,imm8 0F BA /6 BTR AX, 01 ;将AX中01位清0,CF存放指定位并清0
BTR r/m32,imm8 0F BA /6 BTR EAX, 01 ;将EAX中01位清0,CF存放指定位并清0
BTS BTS r/m16,r16 0F AB 设置 CF 将目标指定位置1 (386+) BTS AX, BX ;将AX中BX指定的位置1,CF存放指定位并置1
BTS r/m32,r32 0F AB BTS EAX, EBX ;将EAX中EBX指定的位置1,CF存放指定位并置1
BTS r/m16,imm8 0F BA /5 BTS AX, 01 ;将AX中01位置1,CF存放指定位并置1
BTS r/m32,imm8 0F BA /5 BTS EAX, 01 ;将EAX中01位置1,CF存放指定位并置1
CALL CALL rel16 E8 cw 不影响标志位 子程序调用(16位相对寻址)  
CALL rel32 E8 cd 子程序调用(32位相对寻址)  
CALL r/m16 FF /2 子程序调用(16位间接寻址)  
CALL r/m32 FF /2 子程序调用(32位间接寻址)  
CALL ptr16:16 9A cd 子程序调用(直接绝对寻址)  
CALL ptr16:32 9A cp 子程序调用(直接绝对寻址)  
CALL m16:16 FF /3 子程序调用(间接绝对寻址)  
CALL m16:32 FF /3 子程序调用(间接绝对寻址)  
CBW CBW 98 不影响标志位 将AL值带符号扩展到AX CBW
CDQ CDQ 99 不影响标志位 将EAX值带符号扩展到EDX:EAX CDQ
CLD CLD FC 设置 DF 清除方向位(DF)标志 CLD
CLI CLI FA 设置 IF 清除中断允许位(IF)标志 CLD
CLTS CLTS 0F 06 不影响标志位 清除任务开关标志(TSF) CLTS
CMC CMC F5 设置 CF 进位标志取反 CMC
CMOVcc CMOVA r16, r/m16 0F 47 /r 高于(CF=0 and ZF=0) 条件传送指令 CMOVA AX, BX
CMOVA r32, r/m32 CMOVA EAX, EBX
CMOVAE r16, r/m16 0F 43 /r 高于等于(CF=0) CMOVAE AX, BX
CMOVAE r32, r/m32 CMOVAE EAX, EBX
CMOVB r16, r/m16 0F 42 /r 低于(CF=1) CMOVB AX, BX
CMOVB r32, r/m32 CMOVB EAX, EBX
CMOVBE r16, r/m16 0F 46 /r 低于等于(CF=1 or ZF=1) CMOVBE AX, BX
CMOVBE r32, r/m32 CMOVBE EAX, EBX
CMOVC r16, r/m16 0F 42 /r 有进位(CF=1) CMOVC AX, BX
CMOVC r32, r/m32 CMOVC EAX, EBX
CMOVE r16, r/m16 0F 44 /r 等于(ZF=1) CMOVE AX, BX
CMOVE r32, r/m32 CMOVE EAX, EBX
CMOVG r16, r/m16 0F 4F /r 大于(ZF=0 and SF=OF) CMOVG AX, BX
CMOVG r32, r/m32 CMOVG EAX, EBX
CMOVGE r16, r/m16 0F 4D /r 大于等于(SF=OF) CMOVGE AX, BX
CMOVGE r32, r/m32 CMOVGE EAX, EBX
CMOVL r16, r/m16 0F 4C /r 小于(SF<>OF) CMOVL AX, BX
CMOVL r32, r/m32 CMOVL EAX, EBX
CMOVLE r16, r/m16 0F 4E /r 小于等于(ZF=1 or SF<>OF) CMOVLE AX, BX
CMOVLE r32, r/m32 CMOVLE EAX, EBX
CMOVNA r16, r/m16 0F 46 /r 不高于(CF=1 or ZF=1) CMOVNA AX, BX
CMOVNA r32, r/m32 CMOVNA EAX, EBX
CMOVNAE r16, r/m16 0F 42 /r 不高等于(CF=1) CMOVNAE AX, BX
CMOVNAE r32, r/m32 CMOVNAE EAX, EBX
CMOVNB r16, r/m16 0F 43 /r 不低于(CF=0) CMOVNB AX, BX
CMOVNB r32, r/m32 CMOVNB EAX, EBX
CMOVNBE r16, r/m16 0F 47 /r 不低等于(CF=0 and ZF=0) CMOVNBE AX, BX
CMOVNBE r32, r/m32 CMOVNBE EAX, EBX
CMOVNC r16, r/m16 0F 43 /r 无进位(CF=0) CMOVNC AX, BX
CMOVNC r32, r/m32 CMOVNC EAX, EBX
CMOVNE r16, r/m16 0F 45 /r 不等于(ZF=0) CMOVNE AX, BX
CMOVNE r32, r/m32 CMOVNE EAX, EBX
CMOVNG r16, r/m16 0F 4E /r 不大于(ZF=1 or SF<>OF) CMOVNG AX, BX
CMOVNG r32, r/m32 CMOVNG EAX, EBX
CMOVNGE r16, r/m16 0F 4C /r 不大等于(SF<>OF) CMOVNGE AX, BX
CMOVNGE r32, r/m32 CMOVNGE EAX, EBX
CMOVNL r16, r/m16 0F 4D /r 不小于(SF=OF) CMOVNL AX, BX
CMOVNL r32, r/m32 CMOVNL EAX, EBX
CMOVNLE r16, r/m16 0F 4F /r 不小等于(ZF=0 and SF=OF) CMOVNLE AX, BX
CMOVNLE r32, r/m32 CMOVNLE EAX, EBX
CMOVNO r16, r/m16 0F 41 /r 无溢出(OF=0) CMOVNO AX, BX
CMOVNO r32, r/m32 CMOVNO EAX, EBX
CMOVNP r16, r/m16 0F 4B /r 非偶数(PF=0) CMOVNP AX, BX
CMOVNP r32, r/m32 CMOVNP EAX, EBX
CMOVNS r16, r/m16 0F 49 /r 非负数(SF=0) CMOVNS AX, BX
CMOVNS r32, r/m32 CMOVNS EAX, EBX
CMOVNZ r16, r/m16 0F 45 /r 非零(ZF=0) CMOVNZ AX, BX
CMOVNZ r32, r/m32 CMOVNZ EAX, EBX
CMOVO r16, r/m16 0F 40 /r 溢出(OF=1) CMOVO AX, BX
CMOVO r32, r/m32 CMOVO EAX, EBX
CMOVP r16, r/m16 0F 4A /r 偶数(PF=1) CMOVP AX, BX
CMOVP r32, r/m32 CMOVP EAX, EBX
CMOVPE r16, r/m16 0F 4A /r 偶数(PF=1) CMOVPE AX, BX
CMOVPE r32, r/m32 CMOVPE EAX, EBX
CMOVPO r16, r/m16 0F 4B /r 奇数(PF=0) CMOVPO AX, BX
CMOVPO r32, r/m32 CMOVPO EAX, EBX
CMOVS r16, r/m16 0F 48 /r 负数(SF=1) CMOVS AX, BX
CMOVS r32, r/m32 CMOVS EAX, EBX
CMOVZ r16, r/m16 0F 44 /r 为零(ZF=1) CMOVZ AX, BX
CMOVZ r32, r/m32 CMOVZ EAX, EBX
CMP CMP AL, imm8 3C ib 设置 AF CF OF PF SF ZF 比较大小,然后设置标志位 CMP AL, 1F
CMP AX, imm16 3D iw CMP AX, 4F80
CMP EAX, imm32 3D id CMP EAX, 00004F80
CMP r/m8, imm8 80 /7 ib CMP BYTE PTR [006387EA], 39
CMP r/m16,imm16 81 /7 iw CMP WORD PTR [006387EA], 1039
CMP r/m32,imm32 81 /7 id CMP DWORD PTR [006387EA], 00001039
CMP r/m16,imm8 83 /7 ib CMP WORD PTR [006387EA], 39
CMP r/m32,imm8 83 /7 ib CMP DWORD PTR [006387EA], 39
CMP r/m8,r8 38 /r CMP BYTE PTR [006387EA], AL
CMP r/m16,r16 39 /r CMP WORD PTR [006387EA], AX
CMP r/m32,r32 39 / r CMP DWORD PTR [006387EA], EAX
CMP r8,r/m8 3A /r CMP AL, [006387EA]
CMP r16,r/m16 3B /r CMP AX, [006387EA]
CMP r32,r/m32 3B /r CMP EAX, [006387EA]
CMPS CMPS m8, m8 A6 设置 AF CF OF PF SF ZF 比较字符串,每次比较1个字节 CMPS STRING1, STRING2 ;源串DS:(E)SI,目的串:ES:(E)DI
CMPS m16, m16 A7 比较字符串,每次比较1个字 CMPS STRING1, STRING2 ;源串DS:(E)SI,目的串:ES:(E)DI
CMPS m32, m32 A7 比较字符串,每次比较1个双字 CMPS STRING1, STRING2 ;源串DS:(E)SI,目的串:ES:(E)DI (386+)
CMPSB A6 比较字符串,每次比较1个字节 CMPSB ;源串DS:(E)SI,目的串:ES:(E)DI
CMPSW A7 比较字符串,每次比较1个字 CMPSW ;源串DS:(E)SI,目的串:ES:(E)DI
CMPSD A7 比较字符串,每次比较1个双字 CMPSD ;源串DS:(E)SI,目的串:ES:(E)DI (386+)
CMPXCHG CMPXCHG r/m8,r8 0F B0 /r 设置 AF CF OF PF SF ZF 比较交换 (486+) CMPXCHG BL,CL ;如果AL与BL相等,则CL送BL且ZF置1;否则BL送CL,且ZF清0
CMPXCHG r/m16,r16 0F B1 /r CMPXCHG BX,CX ;如果AX与BX相等,则CX送BX且ZF置1;否则BX送CX,且ZF清0
CMPXCHG r/m32,r32 0F B1 /r CMPXCHG EBX,ECX ;如果EAX与EBX相等,则ECX送EBX且ZF置1;否则EBX送ECX,且ZF清0
CMPXCHG8B CMPXCHG8B m64 0F C7 /1 m64 设置 ZF 比较交换 (486+) CMPXCHG [ESI] ;比较EDX:EAX与64位的目标,如果相等则ECX:EBX送往目标且ZF置1,否则目标送EDX:EAX且ZF清0
CPUID CPUID 0F A2 不影响标志位 CPU标识送EAX、EBX、ECX、EDX CPUID
CWD CWD 99 不影响标志位 将AX带符号扩展到DX:AX CWD
CWDE CWDE 98 不影响标志位 将AX带符号扩展到EAX CWDE
DAA DAA 27 设置 AF CF PF SF ZF 加法后的10进制调整AL DAA
DAS DAS 2F 设置 AF CF PF SF ZF 减法后的10进制调整AL DAS
DEC DEC r/m8 FE /1 设置 AF OF PF SF ZF 目标减1 DEC BYTE PTR [00458A90]
DEC r/m16 FF /1 DEC WORD PTR [00458A90]
DEC r/m32 FF /1 DEC DWORD PTR [00458A90]
DEC r16 48 +rw DEC AX
DEC r32 48 +rd DEC EAX
DIV DIV r/m8 F6 /6 AF CF OF PF SF ZF 未定义 无符号除法 DIV BL ;AX除以BL,商在AL中,余数在AH中
DIV r/m16 F6 /7 DIV BX ;DX:AX除以BX,商在AX中,余数在DX中
DIV r/m32 F6 /7 DIV EBX;EDX:EAX除以BX,商在EAX中,余数在EDX中
EMMS EMMS 0F 77 不影响标志位 清空MMX状态 EMMS
ENTER ENTER imm16,0 C8 iw 00 不影响标志位 为子程序建立堆栈框架,imm16指定要分配的堆栈大小,另外一个操作数指明子程序的等级 (80188+) ENTER 12,0
ENTER imm16,1 C8 iw 01 ENTER 12,1
ENTER imm16,imm8 C8 iw ib DENTER 12,4
ESC ESC 0 D8h xxh 不影响标志位 处理器放弃总线 ESC 0
ESC 1 D9h xxh ESC 1
ESC 2 DAh xxh ESC 2
ESC 3 DBh xxh ESC 3
ESC 4 DCh xxh ESC 4
ESC 5 DDh xxh ESC 5
ESC 6 DEh xxh ESC 6
ESC 7 DFh xxh ESC 7
F2XM1 F2XM1 D9 F0 设置C1 (C0, C2, C3未定义) ST(0)←(2**ST(0) - 1) F2XM1
FABS FABS D9 E1 设置C1 (C0, C2, C3未定义) 求绝对值:ST(0)←ABS(ST(0)) FABS
FADD FADD m32real D8 /0 设置C1 (C0, C2, C3未定义) 实数加法:ST(0)←ST(0)+m32real FADD REAL4 PTR [00459AF0]
FADD m64real DC /0 实数加法:ST(0)←ST(0)+m64real FADD REAL8 PTR [00459AF0]
FADD ST(0), ST(i) D8 C0+i 实数加法:ST(0)←ST(0)+ST(i) FADD ST(0), ST(1)
FADD ST(i), ST(0) DC C0+i 实数加法:ST(i)←ST(i)+ST(0) FADD ST(1), ST(0)
FADDP FADDP ST(i), ST(0) DE C0+i 设置C1 (C0, C2, C3未定义) 先进行实数加法:ST(i)←ST(i)+ST(0),然后进行一次出栈操作 FADDP ST(1), ST(0)
FADDP DE C1 先进行实数加法:ST(0)←ST(0)+ST(1),然后进行一次出栈操作 FADDP
FIADD FIADD m32int DA /0 设置C1 (C0, C2, C3未定义) 加整数:ST(0)←ST(0)+m32int FIADD DWORD PTR [00812CD0]
FIADD m16int DE /0 加整数:ST(0)←ST(0)+m16int FIADD WORD PTR [00812CD0]
FBLD FBLD m80bcd DF /4 设置C1 (C0, C2, C3未定义) 将BCD数装入ST(0),然后压栈push ST(0)  
FBSTP FBSTP m80bcd DF /6 设置C1 (C0, C2, C3未定义) 将ST(0)以BCD数保存在m80bcd,然后出栈pop ST(0)  
FCHS FCHS D9 E0 设置C1 (C0, C2, C3未定义) 改变ST(0)的符号位,即求负数 FCHS
FCLEX FCLEX 9B DB E2 PE, UE, OE, ZE, DE, IE, ES, SF, B 清0,设置C0 (C1, C2, C3未定义) 清除浮点异常标志(检查非屏蔽浮点异常) FCLEX
FNCLEX FNCLEX DB E2 PE, UE, OE, ZE, DE, IE, ES, SF, B 清0,设置C0 (C1, C2, C3未定义) 清除浮点异常标志(不检查非屏蔽浮点异常) FNCLEX
FCMOVcc FCMOVB ST(0), ST(i) DA C0+i 小于(CF=1),设置C1 (C0, C2, C3未定义) 条件浮点传送指令 FCMOVB ST(0), ST(1)
FCMOVE ST(0), ST(i) DA C8+i 等于(ZF=1),设置C1 (C0, C2, C3未定义) FCMOVE ST(0), ST(1)
FCMOVBE ST(0), ST(i) DA D0+i 小于等于(CF=1 or ZF=1),设置C1 (C0, C2, C3未定义) FCMOVBE ST(0), ST(1)
FCMOVU ST(0), ST(i) DA D8+i unordered(PF=1),设置C1 (C0, C2, C3未定义) FCMOVU ST(0), ST(1)
FCMOVNB ST(0), ST(i) DB C0+i 不小于(CF=0),设置C1 (C0, C2, C3未定义) FCMOVNB ST(0), ST(1)
FCMOVNE ST(0), ST(i) DB C8+i 不等于(ZF=0),设置C1 (C0, C2, C3未定义) FCMOVNE ST(0), ST(1)
FCMOVNBE ST(0), ST(i) DB D0+i 不小于等于(CF=0 and ZF=0),设置C1 (C0, C2, C3未定义) FCMOVNBE ST(0), ST(1)
FCMOVNU ST(0), ST(i) DB D8+i not unordered(PF=1),设置C1 (C0, C2, C3未定义) FCMOVNBE ST(0), ST(1)
FCOM FCOM m32real D8 /2 设置C1,C0, C2, C3 实数比较:ST(0)-m32real,设置标志位 FCOM REAL4 PTR [00812CD0]
FCOM m64real DC /2 实数比较:ST(0)-m64real,设置标志位 FCOM REAL8 PTR [00812CD0]
FCOM ST(i) D8 D0+i 实数比较:ST(0)-ST(i),设置标志位 FCOM ST(2)
FCOM D8 D1 实数比较:ST(0)-ST(1),设置标志位 FCOM
FCOMP FCOMP m32real D8 /3 设置C1,C0, C2, C3 实数比较:ST(0)-m32real,设置标志位,执行一次出栈操作 FCOMP REAL4 PTR [00812CD0]
FCOMP m64real DC /3 实数比较:ST(0)-m64real,设置标志位,执行一次出栈操作 FCOMP REAL8 PTR [00812CD0]
FCOMP ST(i) D8 D8+i 实数比较:ST(0)-ST(i),设置标志位,执行一次出栈操作 FCOMP ST(2)
FCOMP D8 D9 实数比较:ST(0)-ST(1),设置标志位,执行一次出栈操作 FCOMP
FCOMI FCOMI ST, ST(i) DB F0+i 设置ZF,PF,CF,C1 实数比较:ST(0)-ST(i),设置标志位 FCOMI ST, ST(1)
FCOMIP FCOMIP ST, ST(i) DF F0+i 设置ZF,PF,CF,C1 实数比较:ST(0)-ST(i),设置标志位,执行一次出栈操作 FCOMIP ST, ST(1)
FUCOMI FUCOMI ST, ST(i) DB E8+i 设置ZF,PF,CF,C1 实数比较:ST(0)-ST(i),检查ordered值,设置标志位 FCOMIP ST, ST(1)
FUCOMIP FUCOMIP ST, ST(i) DF E8+i 设置ZF,PF,CF,C1 实数比较:ST(0)-ST(i),检查ordered值,设置标志位,执行一次出栈操作 FUCOMIP ST, ST(1)
FCOS FCOS D9 FF 设置C1,C2 余弦函数COS,ST(0)←cosine(ST(0)) FCOS
FDECSTP FDECSTP D9 F6 设置C1 (C0, C2, C3未定义) 将FPU的栈顶指针值减小1 FDECSTP
FDIV FDIV m32real D8 /6 设置C1 (C0, C2, C3未定义) 实数除法:ST(0)←ST(0)/m32real FDIV REAL4 PTR [00459AF0]
FDIV m64real DC /6 实数除法:ST(0)←ST(0)/m64real FDIV REAL8 PTR [00459AF0]
FDIV ST(0), ST(i) D8 F0+i 实数除法:ST(0)←ST(0)/ST(i) FDIV ST(0), ST(1)
FDIV ST(i), ST(0) DC F8+i 实数除法:ST(i)←ST(i)/ST(0) FDIV ST(1), ST(0)
FDIVP FDIVP ST(i), ST(0) DE F8+i 设置C1 (C0, C2, C3未定义) 实数除法:ST(i)←ST(i)/ST(0),执行一次出栈操作 FDIVP ST(1), ST(0)
FDIVP DE F9 实数除法:ST(1)←ST(1)/ST(0),执行一次出栈操作 FDIVP
FIDIV FIDIV m32int DA /6 设置C1 (C0, C2, C3未定义) 除以整数:ST(0)←ST(0)/m32int FIDIV DWORD PTR [00459AF0]
FIDIV m16int DE /6 除以整数:ST(0)←ST(0)/m16int FIDIV WORD PTR [00459AF0]
FDIVR FDIVR m32real D8 /7 设置C1 (C0, C2, C3未定义) 实数除法:ST(0)←m32real/ST(0) FDIVR REAL4 PTR [00459AF0]
FDIVR m64real DC /7 实数除法:ST(0)←m64real/ST(0) FDIVR REAL8 PTR [00459AF0]
FDIVR ST(0), ST(i) D8 F8+i 实数除法:ST(0)←ST(i)/ST(0) FDIVR ST(0), ST(1)
FDIVR ST(i), ST(0) DC F0+i 实数除法:ST(i)←ST(0)/ST(i) FDIVR ST(1), ST(0)
FDIVRP FDIVRP ST(i), ST(0) DE F0+i 设置C1 (C0, C2, C3未定义) 实数除法:ST(i)←ST(0)/ST(i),执行一次出栈操作 FDIVRP ST(1), ST(0)
FDIVRP DE F1 实数除法:ST(1)←ST(0)/ST(1),执行一次出栈操作 FDIVRP
FIDIVR FIDIVR m32int DA /7 设置C1 (C0, C2, C3未定义) 被整数除:ST(0)←m32int/ST(0) FIDIVR DWORD PTR [00459AF0]
FIDIVR m16int DE /7 被整数除:ST(0)←m16int/ST(0) FIDIVR WORD PTR [00459AF0]
FFREE FFREE ST(i) DD C0+i (C0, C1,C2, C3未定义) 将与ST(i)相对应的标志位设置为空,即TAG(i)←11B FFREE ST(1)
FICOM FICOM m16int DE /2 设置 C1,C0, C2, C3 和整数比较:ST(0)- m16int,设置标志 FICOM WORD PTR [00459AF0]
FICOM m32int DA /2 和整数比较:ST(0)- m32int,设置标志 FICOM DWORD PTR [00459AF0]
FICOMP FICOMP m16int DE /3 设置C1,C0, C2, C3 和整数比较:ST(0)- m16int,设置标志,执行一次出栈操作 FICOMP WORD PTR [00459AF0]
FICOMP m32int DA /3 和整数比较:ST(0)- m32int,设置标志,执行一次出栈操作 FICOMP DWORD PTR [00459AF0]
FILD FILD m16int DF /0 设置C1 (C0, C2, C3未定义) 将16位整数压栈,即装入ST(0) FILD WORD PTR [00459AF0]
FILD m32int DB /0 将32位整数压栈,即装入ST(0) FILD DWORD PTR [00459AF0]
FILD m64int DF /5 将64位整数压栈,即装入ST(0)  
FINCSTP FINCSTP D9 F7 设置C1 (C0, C2, C3未定义) 将FPU的栈顶指针值增大1 FINCSTP
FINIT FINIT 9B DB E3 设置C1 (C0, C2, C3未定义) 初始化FPU,检查非屏蔽浮点异常 FINIT
FNINIT FNINIT DB E3 设置C1 (C0, C2, C3未定义) 初始化FPU,不检查非屏蔽浮点异常 FNINIT
FIST FIST m16int DF /2 设置C1 (C0, C2, C3未定义) 将ST(0)以16位整数保存到m16int FIST WORD PTR [00459AF0]
FIST m32int DB /2 将ST(0)以32位整数保存到m32int FIST DWORD PTR [00459AF0]
FISTP FISTP m16int DF /3 设置C1 (C0, C2, C3未定义) 将ST(0)以16位整数保存到m16int,执行一次出栈操作 FISTP WORD PTR [00459AF0]
FISTP m32int DB /3 将ST(0)以32位整数保存到m32int,执行一次出栈操作 FISTP DWORD PTR [00459AF0]
FISTP m64int DF /7 将ST(0)以64位整数保存到m64int,执行一次出栈操作  
FLD FLD m32real D9 /0 设置C1 (C0, C2, C3未定义) 将32位实数压栈,即装入ST(0) FLD REAL4 PTR [00459AF0]
FLD m64real DD /0 将64位实数压栈,即装入ST(0) FLD REAL8 PTR [00459AF0]
FLD m80real DB /5 将80位实数压栈,即装入ST(0)  
FLD ST(i) D9 C0+i 将ST(i)压栈,即装入ST(0) FLD ST(7)
FLD1 FLD1 D9 E8 设置C1 (C0, C2, C3未定义) 将+1.0压栈,即装入ST(0) FLD1
FLDL2T FLDL2T D9 E9 设置C1 (C0, C2, C3未定义) 将log2(10)压栈,即装入ST(0) FLDL2T
FLDL2E FLDL2E D9 EA 设置C1 (C0, C2, C3未定义) 将log2(e)压栈,即装入ST(0) FLDL2E
FLDPI FLDPI D9 EB 设置C1 (C0, C2, C3未定义) 将pi压栈,即装入ST(0) FLDPI
FLDLG2 FLDLG2 D9 EC 设置C1 (C0, C2, C3未定义) 将log10(2)压栈,即装入ST(0) FLDLG2
FLDLN2 FLDLN2 D9 ED 设置C1 (C0, C2, C3未定义) 将loge(2)压栈,即装入ST(0) FLDLN2
FLDZ FLDZ D9 EE 设置C1 (C0, C2, C3未定义) 将+0.0压栈,即装入ST(0) FLDZ
FLDCW FLDCW m2byte D9 /5 C1, C0, C2, C3 未定义 从m2byte装入FPU控制字 FLDCW BYTE PTR [00459AF0]
FLDENV FLDENV m14/28byte D9 /4 C1, C0, C2, C3 未定义 从m14/28byte装入FPU环境 FLDENV BYTE PTR [00459AF0]
FMUL FMUL m32real D8 /1 设置C1 (C0, C2, C3未定义) 实数乘法:ST(0)←ST(0)*m32real FMUL REAL4 PTR [00459AF0]
FMUL m64real DC /1 实数乘法:ST(0)←ST(0)*m64real FMUL REAL8 PTR [00459AF0]
FMUL ST(0), ST(i) D8 C8+i 实数乘法:ST(0)←ST(0)*ST(i) FMUL ST(0), ST(1)
FMUL ST(i), ST(0) DC C8+i 实数乘法:ST(i)←ST(i)*ST(0) FMUL ST(1), ST(0)
FMULP FMULP ST(i), ST(0) DE C8+i 设置C1 (C0, C2, C3未定义) 实数乘法:ST(i)←ST(i)*ST(0),执行一次出栈操作 FMULP ST(1), ST(0)
FMULP DE C9 实数乘法:ST(1)←ST(1)*ST(0),执行一次出栈操作 FMULP
FIMUL FIMUL m32int DA /1 设置C1 (C0, C2, C3未定义) 乘以整数:ST(0)←m32int*ST(0) FIMUL DWORD PTR [00459AF0]
FIMUL m16int DE /1 乘以整数:ST(0)←m16int*ST(0) FIMUL WORD PTR [00459AF0]
FNOP FNOP D9 D0 C1, C0, C2, C3 未定义 空操作(等同于NOP) FNOP
FPATAN FPATAN D9 F3 设置C1 (C0, C2, C3未定义) 反正切函数arctan,ST(1)←arctan(ST(1)/ST(0)),执行一次出栈操作 FPATAN
FPREM FPREM D9 F8 设置C1,C0, C2, C3 取余数,ST(0)←ST(0) MOD ST(1) FPREM
FPREM1 FPREM1 D9 F5 设置C1,C0, C2, C3 取余数(使用IEEE标准),ST(0)←ST(0) MOD ST(1) FPREM1
FATAN FATAN D9 F2 设置C1,C2 (C0, C3未定义) 正切函数Tan,ST(0)←tangent(ST(0)),执行一次压栈1.0的操作 FATAN
FRNDINT FRNDINT D9 FC 设置C1 (C0,C2,C3未定义) 取整(四舍五入,当小数部分刚好等于0.5时:如果整数部分为偶数,则“舍”;如果整数部分为奇数,则“入”),ST(0)←Round(ST(0)) FRNDINT
FRSTOR FRSTOR m94/108byte DD /4 设置C0,C1,C2,C3 从m94/108byte装入FPU状态 FRSTOR BYTE PTR [00459AF0]
FSAVE FSAVE m94/108byte 9B DD /6 设置C0,C1,C2,C3 将FPU状态保存在m94/108byte中,检查非屏蔽浮点异常,然后初始化FPU FSAVE BYTE PTR [00459AF0]
FNSAVE FNSAVE m94/108byte 9B DD /6 设置C0,C1,C2,C3 将FPU状态保存在m94/108byte中,不检查非屏蔽浮点异常,然后初始化FPU FNSAVE BYTE PTR [00459AF0]
FSCALE FSCALE D9 FD 设置C1 (C0,C2,C3 未定义) ST(0)←ST(0)* 2^ST(1) FSCALE
FSIN FSIN D9 FE 设置C1,C2 (C0,C3 未定义) 正弦函数Sin,ST(0)←sine(ST(0)) FSIN
FSINCOS FSINCOS D9 FB 设置C1,C2 (C0,C3 未定义) SinCos函数: ST(0)←sine(ST(0)),PUSH cosine(ST(0)) FSINCOS
FSQRT FSQRT D9 FA 设置C1 (C0,C2, C3 未定义) 平方根函数: ST(0)←SQRT(ST(0)) FSQRT
FST FST m32real D9 /2 设置C1 (C0, C2, C3未定义) 将ST(0)复制到m32real FST REAL4 PTR [00459AF0]
FST m64real DD /2 将ST(0)复制到m64real FST REAL8 PTR [00459AF0]
FST ST(i) DD D0+i 将ST(0)复制到ST(i) FST ST(3)
FSTP FSTP m32real D9 /3 设置C1 (C0, C2, C3未定义) 将ST(0)复制到m32real,执行一次出栈操作 FSTP REAL4 PTR [00459AF0]
FSTP m64real DD /3 将ST(0)复制到m64real,执行一次出栈操作 FSTP REAL8 PTR [00459AF0]
FSTP m80real DB /7 将ST(0)复制到m80real,执行一次出栈操作  
FSTP ST(i) DD D8+i 将ST(0)复制到ST(i),执行一次出栈操作 FSTP ST(3)
FSTCW FSTCW m2byte 9B D9 /7 C0,C1,C2,C3 未定义 将FPU控制字保存到m2byte,检查非屏蔽浮点异常 FSTCW BYTE PTR [00459AF0]
FNSTCW FNSTCW m2byte 9B D9 /7 C0,C1,C2,C3 未定义 将FPU控制字保存到m2byte,不检查非屏蔽浮点异常 FNSTCW BYTE PTR [00459AF0]
FSTENV FSTENV m14/28byte 9B D9 /6 C0,C1,C2,C3 未定义 将FPU环境保存到m14/28byte,检查非屏蔽浮点异常,然后屏蔽所有浮点异常 FSTENV BYTE PTR [00459AF0]
FNSTENV FNSTENV m14/28byte D9 /6 C0,C1,C2,C3 未定义 将FPU环境字保存到m14/28byte,不检查非屏蔽浮点异常,然后屏蔽所有浮点异常 FNSTENV BYTE PTR [00459AF0]
FSTSW FSTSW m2byte 9B DD /7 C0,C1,C2,C3 未定义 将FPU状态字保存到m2byte,检查非屏蔽浮点异常 FSTSW BYTE PTR [00459AF0]
FSTSW AX 9B DF E0 将FPU状态字保存到AX,检查非屏蔽浮点异常 FSTSW AX
FNSTSW FNSTSW m2byte DD /7 C0,C1,C2,C3 未定义 将FPU状态字保存到m2byte,不检查非屏蔽浮点异常 FNSTSW BYTE PTR [00459AF0]
FNSTSW AX DF E0 将FPU状态字保存到AX,不检查非屏蔽浮点异常 FNSTSW AX
FSUB FSUB m32real D8 /4 设置C1 (C0, C2, C3未定义) 实数减法:ST(0)←ST(0)-m32real FSUB REAL4 PTR [00459AF0]
FSUB m64real DC /4 实数减法:ST(0)←ST(0)-m64real FSUB REAL8 PTR [00459AF0]
FSUB ST(0), ST(i) D8 E0-i 实数减法:ST(0)←ST(0)-ST(i) FSUB ST(0), ST(1)
FSUB ST(i), ST(0) DC E8-i 实数减法:ST(i)←ST(i)-ST(0) FSUB ST(1), ST(0)
FSUBP FSUBP ST(i), ST(0) DE E8-i 设置C1 (C0, C2, C3未定义) 先进行实数减法:ST(i)←ST(i)-ST(0),然后进行一次出栈操作 FSUBP ST(1), ST(0)
FSUBP DE E9 先进行实数减法:ST(1)←ST(1)-ST(0),然后进行一次出栈操作 FSUBP
FISUB FISUB m32int DA /4 设置C1 (C0, C2, C3未定义) 减整数:ST(0)←ST(0)-m32int FISUB DWORD PTR [00812CD0]
FISUB m16int DE /4 减整数:ST(0)←ST(0)-m16int FISUB WORD PTR [00812CD0]
FSUBR FSUBR m32real D8 /5 设置C1 (C0, C2, C3未定义) 实数减法:ST(0)←m32real-ST(0) FSUBR REAL4 PTR [00459AF0]
FSUBR m64real DC /5 实数减法:ST(0)←m64real-ST(0) FSUBR REAL8 PTR [00459AF0]
FSUBR ST(0), ST(i) D8 E8+i 实数减法:ST(0)←ST(i)-ST(0) FSUBR ST(0), ST(1)
FSUBR ST(i), ST(0) DC E0+i 实数减法:ST(i)←ST(0)-ST(i) FSUBR ST(1), ST(0)
FSUBRP FSUBRP ST(i), ST(0) DE E0+i 设置C1 (C0, C2, C3未定义) 实数减法:ST(i)←ST(0)-ST(i),执行一次出栈操作 FSUBRP ST(1), ST(0)
FSUBRP DE E1 实数减法:ST(1)←ST(0)-ST(1),执行一次出栈操作 FSUBRP
FISUBR FISUBR m32int DA /5 设置C1 (C0, C2, C3未定义) 被整数减:ST(0)←m32int-ST(0) FISUBR DWORD PTR [00459AF0]
FISUBR m16int DE /5 被整数减:ST(0)←m16int-ST(0) FISUBR WORD PTR [00459AF0]
FTST FTST D9 E4 设置C0,C1, C2, C3 零检测,将ST(0)和0.0相比较 FTST
FUCOM FUCOM ST(i) DD E0+i 设置C0,C1, C2, C3 比较ST(0)和ST(i) FUCOM ST(4)
FUCOM DD E1 比较ST(0)和ST(1) FUCOM
FUCOMP FUCOMP ST(i) DD E8+i 设置C0,C1, C2, C3 比较ST(0)和ST(i),执行一次出栈操作 FUCOMP ST(4)
FUCOMP DD E9 比较ST(0)和ST(1),执行一次出栈操作 FUCOMP
FUCOMPP FUCOMPP DD E8+i 设置C0,C1, C2, C3 比较ST(0)和ST(1),执行两次出栈操作 FUCOMPP
FWAIT FWAIT 9B C0,C1, C2, C3 未定义 等待,检查非屏蔽浮点异常 FWAIT
FXAM FXAM D9 E5 设置C0,C1, C2, C3 检查ST(0)中的数值类型 FXAM
FXCH FXCH ST(i) D9 C8+i 设置C1 (C0, C2, C3未定义) 交换ST(0)和ST(i)的内容 FXCH ST(4)
FXCH D9 C9 交换ST(0)和ST(1)的内容 FXCH
FXRSTOR FXRSTOR m512byte 0F AE /1 恢复所有标志位 由m512byte恢复寄存器x87 FPU, MMX, XMM, 和MXCSR的状态 FXRSTOR BYTE PTR [00459AF0]
FXSAVE FXSAVE m512byte 0F AE /0 不影响标志位 将寄存器x87 FPU, MMX, XMM, 和MXCSR的状态保存到m512byte FXSAVE BYTE PTR [00459AF0]
FXTRACT FXTRACT D9 F4 设置C1 (C0, C2, C3未定义) 将ST(0)中的数分成exponent和significand两部分,ST(0)←Exponent(ST(0)),PUSH Significand(ST(0)) FXTRACT
FYL2X FYL2X D9 F1 设置C1 (C0, C2, C3未定义) 计算:ST(1)←ST(1)*log2(ST(0)),执行一次出栈操作 FYL2X
FYL2XP1 FYL2XP1 D9 F9 设置C1 (C0, C2, C3未定义) 计算:ST(1) ←ST(1)*log2(ST(0) + 1.0),执行一次出栈操作 FYL2XP1
HLT HLT F4 不影响标志位 系统进入暂停状态 HLT
IDIV IDIV r/m8 F6 /7 AF CF OF PF SF ZF 未定义 有符号除法 IDIV BL ;AX除以BL,商在AL中,余数在AH中
IDIV r/m16 F7 /7 IDIV BX ;DX:AX除以BX,商在AX中,余数在DX中
IDIV r/m32 F7 /7 IDIV EBX;EDX:EAX除以BX,商在EAX中,余数在EDX中
IMUL IMUL r/m8 F6 /5 设置CF OF
(SF ZF AF PF未定义)
有符号乘法:AX←AL*r/m8 IMUL CL
IMUL r/m16 F7 /5 有符号乘法:DX:AX←AX*r/m16 IMUL CX
IMUL r/m32 F7 /5 有符号乘法:EDX:EAX←EAX*r/m32 IMUL ECX
IMUL r16, r/m16 0F AF /r 有符号乘法:r16←r16*r/m16 IMUL AX, BX
IMUL r32, r/m32 0F AF /r 有符号乘法:r32←r32*r/m32 IMUL EAX, EBX
IMUL r16,r/m16,imm8 6B /r ib 有符号乘法:r16←r/m16*imm8 IMUL AX, BX, 39
IMUL r32,r/m32,imm8 6B /r ib 有符号乘法:r32←r/m32*imm8 IMUL EAX, EBX, 39
IMUL r16, imm8 6B /r ib 有符号乘法:r16←r16*imm8 IMUL AX, 37
IMUL r32, imm8 6B /r ib 有符号乘法:r32←r32*imm8 IMUL EAX, 37
IMUL r16,r/m16,imm16 69 /r iw 有符号乘法:r16←r/m16*imm16 IMUL AX, BX, 387E
IMUL r32,r/m32,imm32 69 /r id 有符号乘法:r32←r/m32*imm32 IMUL EAX, EBX, 006387EA
IMUL r16, imm16 69 /r iw 有符号乘法:r16←r16*imm16 IMUL AX, 387E
IMUL r32, imm32 69 /r id 有符号乘法:r32←r32*imm32 IMUL EAX, 006387EA
IN IN AL,imm8 E4 ib 不影响标志位 从imm8指定的端口读字节(BYTE)到AL IN AL,E0
IN AX,imm8 E5 ib 从imm8指定的端口读字节(BYTE)到AX IN AX,E0
IN EAX,imm8 E5 ib 从imm8指定的端口读字节(BYTE)到EAX IN EAX,E0
IN AL,DX EC 从DX指定的端口读字节(BYTE)到AL IN AL,DX
IN AX,DX ED 从DX指定的端口读字(WORD)到AX IN AX,DX
IN EAX,DX ED 从DX指定的端口读双字(DWORD)到EAX IN EAX,DX
INC INC r/m8 FE /0 设置 OF SF ZF AF PF 目标加1 INC BYTE PTR [00459AF0]
INC r/m16 FF /0 INC WORD PTR [00459AF0]
INC r/m32 FF /0 INC DWORD PTR [00459AF0]
INC r16 40+rw INC DX
INC r32 40+rd INC EDX
INS INS m8, DX 6C 不影响标志位 从DX指定的端口读字节(BYTE)到ES:(E)DI  
INS m16, DX 6D 从DX指定的端口读字(WORD)到ES:(E)DI  
INS m32, DX 6D 从DX指定的端口读双字(DWORD)到ES:(E)DI  
INSB INSB 6C 不影响标志位 从DX指定的端口读字节(BYTE)到ES:(E)DI INSB
INSW INSW 6D 不影响标志位 从DX指定的端口读字(WORD)到ES:(E)DI INSW
INSD INSD 6D 不影响标志位 从DX指定的端口读双字(DWORD)到ES:(E)DI INSD
INT 3 INT 3 CC 标志位被保存压栈 调试陷阱中断 INT 3
INT imm8 INT imm8 CD ib 标志位被保存压栈 中断功能调用,imm8是中断向量号 INT 21
INTO INTO CE 标志位被保存压栈 溢出中断,条件:OV=1,4号中断功能调用 INTO
INVD INVD 0F 08 不影响标志位 使内部CACHES无效,初始化外部CACHES INVD
INVLPG INVLPG 0F 01/7 不影响标志位 使TLB项无效 INVLPG [EBX]
IRET IRET CF 恢复被压栈的标志位 中断返回(16位) IRET
IRETD IRETD CF 恢复被压栈的标志位 中断返回(32位) IRETD
Jcc JA rel8 77 cb 高于(CF=0 and ZF=0) 条件转移指令  
JAE rel8 73 cb 高于等于(CF=0)  
JB rel8 72 cb 低于(CF=1)  
JBE rel8 76 cb 低于等于(CF=1 or ZF=1)  
JC rel8 72 cb 有进位(CF=1)  
JCXZ rel8 E3 cb CX=0则跳  
JECXZ rel8 E3 cb ECX=0则跳  
JE rel8 74 cb 等于(ZF=1)  
JG rel8 7F cb 大于(ZF=0 and SF=OF)  
JGE rel8 7D cb 大于等于(SF=OF)  
JL rel8 7C cb 小于(SF<>OF)  
JLE rel8 7E cb 小于等于(ZF=1 or SF<>OF)  
JNA rel8 76 cb 不高于(CF=1 or ZF=1)  
JNAE rel8 72 cb 不高等于(CF=1)  
JNB rel8 73 cb 不低于(CF=0)  
JNBE rel8 77 cb 不低等于(CF=0 and ZF=0)  
JNC rel8 73 cb 无进位(CF=0)  
JNE rel8 75 cb 不等于(ZF=0)  
JNG rel8 7E cb 不大于(ZF=1 or SF<>OF)  
JNGE rel8 7C cb 不大等于(SF<>OF)  
JNL rel8 7D cb