【问题标题】:How are Opcodes & Operands Defined in a CPU?CPU 中如何定义操作码和操作数?
【发布时间】:2017-07-29 09:22:10
【问题描述】:
在 3 天的时间里,大量搜索让我陷入了循环,所以我希望你们能帮我休息一下。
为什么一个8位的高低位序列执行this动作,而8位序列执行that动作。
我的直觉告诉我,CPU 的电路硬连线一个二进制序列来做一件事,另一个做另一件事。这意味着具有可能不同芯片电路的不同处理器不会将一个特定的二进制序列定义为与另一个相同的动作?
这就是我们要组装的原因吗?我需要有人来确认和/或纠正我的假设!
【问题讨论】:
标签:
cpu
hardware
machine-code
【解决方案1】:
操作码并不总是 8 位,但是是的,它在逻辑中被硬编码/连接以隔离操作码,然后根据该操作向您发送一个操作过程。想想你在指令集模拟器中是如何做到的,为什么逻辑会有所不同?逻辑比软件语言简单,那里没有魔法。一、零、与、或,没那么复杂。
如果给我一份指令集文档,给你一份指令集文档并告诉你创建一个处理器或编写一个指令集模拟器,情况也是如此。我们会产生完全相同的代码吗?即使变量名不同?不。理想情况下,我们应该有功能相同的程序,它们都解析指令并执行它。逻辑没有什么不同,您将规范交给两个工程师,您可能会得到两个功能相同的不同处理器,一个可能性能更好,等等。看看长期运行的处理器系列,特别是 x86,他们重新发明了每一对 -三年是与旧指令兼容的指令集,但有时会添加新指令。 ARM 和其他人也是如此。
并且有不同的指令集 ARM 不同于 x86 与 MIPS 不同,您在指令中检查的操作码和/或位会有所不同,因为这些都不能简单地查看 8 位,然后每个位都有一些位如果这不足以唯一地识别指令/操作,那么您需要检查更多位,这些位是规则对每个架构都非常具体的内容。否则,如果它们相同,那么为它们取不同的名称又有什么意义呢。
而这些信息就在那里,你只是没找对地方,有无数关于这个主题的开放在线课程,谷歌应该点击一些页面的书籍,以及你可以查看的开源处理器内核和无数带有源代码的指令集模拟器。