【发布时间】:2019-04-08 01:35:09
【问题描述】:
我从我实现的汇编程序中生成了一个十六进制的 32 位指令转储。指令转储的一个子集如下所示:
指令的操作码长度为 4、7、8、9 和 11。它们始终是指令中的第一位。如果操作码的长度不同,我无法理解如何解码指令?
例如:当我读取一条指令时,我怎么知道我应该为操作码读取多少位?
谢谢
【问题讨论】:
-
我们怎么知道?我假设操作码中有逻辑,否则没有处理器可以解码它们。也许如果他的前 3 位是 111,长度是 7,依此类推。但是以您提供的信息,不可能给您任何建议。
-
指令中的其余字段都是操作数或立即数。指令中除了操作码之外没有其他信息。我已经添加了说明格式的图片。
-
你必须看指令说明。例如,通过快速扫描索尼文档,我注意到所有 10 位操作码指令都以 001 开头。其他指令可能有类似的逻辑。
-
是的,我试图找到这样的模式。由于最小的操作码是 4 位,所以每条指令的前 4 位内必须有一个模式;但没有(我可以看到)。一些指令(具有不同的操作码长度)具有相同的前 4 位。
-
这里是一个逻辑。否则处理器无法解码指令。尝试找到可以确定图案大小的最小图案长度并使用查找表。
标签: cpu-architecture dump opcode hexdump spu