首页 > 编程知识 正文

汇编字节能不能转二进制,汇编3字节指令

时间:2023-05-04 18:22:49 阅读:51867 作者:3846

问题

以下两个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

我想知道他们的同义词和为什么存在

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。