专家,我想知道x86机器的intelx/assemblyCode转换是singleSide还是bothSide?

表示:assemblyCode ---> machineCode和machineCode ---> assemblyCode均可用。

由于x86 machineCode的大小(1-15字节)不同,而操作码(1-3字节)不同,如何确定一个操作码是1byte还是2byte或3byte?

而且我还没有找到x86指令的前缀示例,如果这里是1byte前缀,如何确定它是前缀还是操作码?

当然,assemblyCode ---> machineCode,助记符+ oprand [w/b]的标识可以通过映射某些MappingTable来确定响应的MachineCode是什么。

但是,当流程相反时:

{bbbbbbbb,bbbbbbbb,bbbbbbbb,//instruction1
bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,//指令2
bbbbbbbb,bbbbbbbb//instruction3
}

---->
{bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb}

我不知道确定一条指令的长度(多大)的有效位或字节数是多少。

有人会告诉我如何确定吗?(操作码的大小,带有前缀的示例。)
感谢帮助。

最佳答案

您需要的详细信息在Intel® 64 and IA-32 ArchitecturesSoftware Developer’s Manual Volume 2B: Instruction Set Reference, N-Z中。查看附录A,其中包含您需要的所有内容。

关于assembly - 英特尔机器码到汇编码的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2409612/

10-10 19:29