问题
以下两个x86命令之间的“不平凡”区别是什么?
39 /r CMP r/m32,R32比较器R32 with r/m32
3B /r CMP r32,r/m32比较器r/m32 with R32
背景
我正在构建Java汇编器。 它用于编译器的中间语言,生成Windows-32可执行文件。
现在我有以下代码:
final ModelBase mb=new ModelBase (;//创建新内存模型
MB .添加代码(new compare ) Register.EAX,Register.EAX );//添加代码
MB.addcode(newcompare ) Register.ECX,Register.ECX );//添加代码
finalfileoutputstreamfos=new file output stream (new file (' test.exe ' );
MB.writetofile(fos;
fos.close (;
输出有效的可执行文件。 它包含TEXT部分中的两个CMP指令。 输出到“text.exe”的可执行文件没有意思,但这并不重要。 Compare类是CMP指令的包装器。
上述代码生成(使用OllyDbg检查) :
Address Hex dump Command
0040101F |. 3BC8 CMP ECX,EAX
00401021 |. 3BC1 CMP EAX,ECX
区别很微妙。 如果使用39字节的操作码:
Address Hex dump Command
0040101F |. 39C1 CMP ECX,EAX
00401021 |. 39C8 CMP EAX,ECX
我想知道他们的同义词和为什么存在