专家,我想知道 intel x86 machineCode/assemblyCode 转换是单面还是双面?
表示:assemblyCode ---> machineCode 和 machineCode ---> assemblyCode 都可用。
由于 x86 机器代码的大小不同(1-15 字节),操作码也不同(1-3 字节),如何确定一个操作码是 1 字节还是 2 字节或 3 字节?
我从来没有找到x86指令前缀的例子,如果这里是1字节前缀,如何确定它是前缀还是操作码?
当然, assemblyCode ---> machineCode , mnemonics + oprand[w/b] 的标识可以通过映射某个 MappingTable 来确定响应的 machineCode 是什么。
但是,当过程相反时:
{ bbbbbbbb,bbbbbbbb,bbbbbbbb, //指令1 bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,//指令2 bbbbbbbb,bbbbbbbb//指令3 }
----> {bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb,bbbbbbbb}
我不知道哪个是有效位或字节来确定一条指令的长度(多大)。
有人能告诉我如何确定吗?(操作码的大小,前缀示例。)感谢您的帮助。