专家,我想知道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/