Encoding 是否有某种工具可以查看英特尔x86指令的编码?

Encoding 是否有某种工具可以查看英特尔x86指令的编码?,encoding,x86,Encoding,X86,如果这可能是一个愚蠢的问题,请原谅我,但是,我在一个汇编类中,主要是使用模拟CPU来教授汇编代码的概念。我们甚至还没有写一个英特尔程序,所以我正在努力调整。在我们的模拟CPU中,我们能够生成一个符号表文件,为指令提供等效字节: 我能用英特尔x86指令做这样的事情吗?试试看,它有一个显示操作码二进制值的选项 编辑:嗯。。这是一个反汇编程序。尝试打开一个二进制文件,并将要显示的操作码字节数(在Options/General/中)设置为非零 如果你正在寻找一个能实时显示你所使用指令的操作码的IDE,

如果这可能是一个愚蠢的问题,请原谅我,但是,我在一个汇编类中,主要是使用模拟CPU来教授汇编代码的概念。我们甚至还没有写一个英特尔程序,所以我正在努力调整。在我们的模拟CPU中,我们能够生成一个符号表文件,为指令提供等效字节:

我能用英特尔x86指令做这样的事情吗?

试试看,它有一个显示操作码二进制值的选项

编辑:嗯。。这是一个反汇编程序。尝试打开一个二进制文件,并将要显示的操作码字节数(在Options/General/中)设置为非零

如果你正在寻找一个能实时显示你所使用指令的操作码的IDE,那么我认为你找不到,因为缺乏“市场”。你能解释一下你为什么需要它吗?你是想知道它们的长度,还是想了解它们?长度有一个简单的模式,所以通过分解许多二进制文件,您将捕获它。如果是你想要的操作码。。嗯,有很多,几乎没有规则,而且几乎没有用

我明白了。。然后您必须生成列表文件。你的汇编程序应该有一个选项。(对于NASM,它是
-l列表文件
)。只需将任何指令放入.asm文件中,并为其生成列表。它应该包含每条指令的二进制编码

首先,获取或更好地获取此链接:。在这里,您会发现大多数操作码都有几种编码。在您的特定情况下,操作码的第1位指定方向,由于两个操作数都是寄存器,您可以切换方向并交换寄存器代码,结果将是相同的。通常,在大多数寄存器到寄存器的算术运算中,您都有这种自由。要检查此问题,请尝试使用此源文件反编译:

db 02h, E0h
db 00h, C4h

有一个附带有编辑器和十六进制查看器的演示程序:

您能给我指出正确的方向吗?我用程序打开了.asm文件,但我不知道下一步要去哪里。对不起,你已经把我弄丢了。我要再次强调的是,我的老师并没有真正教我们如何用英特尔编写完整的程序,我们真正涉及的只是寻址模式之类的概念。我们的模拟cpu的工作方式是,它接受代码并生成符号表文件和执行的obj文件。基本上,我们应该推断指令的编码方式。我在看规则什么的,但我想确定我是正确地遵循它们的。(即MOV的不同操作码,取决于8位寄存器/内存与16位、寻址模式等)。如果没有这些类型的东西,那么我想我只能希望我读对了。谢谢。谢谢,我已经生成了列表文件,但是由于某些原因,它没有给我我所期望的。加啊,它给了我00C4。我的书中说,对于8086,ADD有一个8位寄存器/内存的$02操作码,一个11的mod(二进制)来使用寄存器而不是内存地址,AH是100(二进制),AL是000(二进制)。1110 0000二进制是$E0。所以整个指令总共是$02E0。如果你能解释一下区别的话?