问题描述
我在 8位8051 MCU 上工作,我不明白为什么我们说操作码是用n字编码的,所以在这种体系结构上将是1个字节。
/>
在ISA中,一些带有操作数的助记符仅编码在一个字节上,这是什么意思,我们也不计算操作数吗?应该至少2个字节,不是吗?
解决方法
像许多其他术语一样,操作码是8位处理器,32位处理器,嵌入式,片上系统等等,它们含糊不清,没有被钉住,也永远不会被期望,所以不要让自己陷入困境困惑。
当您说一个MIPS架构时,它是从头开始设计的,对芯片人员来说很容易,对软件人员来说比较难,非常适合学术用途。您会在固定长度指令中看到明确定义的操作码字段。一旦解码了这些位,这些位就和其他位一样有意义。例如,ARM选择了效率更高的产品,其架构对逻辑人员的要求更高,而对软件人员和性能的要求则更加容易。因此,您没有为整个指令集定义明确的操作码字段,而是从顶部开始解码并将其分成几组,然后在一组内您可能会有一个操作码(数据操作中有加,减,异或等)。
但是,如果您返回到所谓的8位系统6502,z80、8051,也许还有8086。这些CISC处理器的操作码是一个字节或以一个字节开头,并且该字节中的位通常不解码为某个字节,总的说来,将此寄存器添加到累加器中。从该寄存器中减去该寄存器,依此类推。然后,根据第一个字节,您可能还有其他一些,它们可能是进一步解码的项目,更多的幻数,或者是诸如立即数之类的实际参数。如果您查看其中一些指令,通常会看到255种可能的指令及其含义的表,有时经过深思熟虑,他们会采用一个或多个指令并将其扩展为其他256种可能的指令,因此第一个字节基本上表示还有另一张操作码表可以检查出来,这些操作码也可能只是不可解码的幻数,它们被当作一个整体来处理。解码是从文档而不是从位众所周知的。可以理解,由于当时的技术和其他原因,这些操作码在某种程度上只是寻址到微码所在的rom中,因此操作码中没有位解码。
您对术语的混淆并不是真正的混淆,有些人将整个指令称为操作码,有些人仅将指令的一小部分称为操作码,我认为这可以追溯到这8位指令架构,其中第一个字节只是查找表条目中的代码会告诉您该操作是什么,然后根据需要将参数作为参数,但是操作码通常是整个指令。
我认为操作码只是指示操作的部分,但整个指令由操作码和参数组成。对于ARM,我会在文档的指令部分中将指令的所有硬编码位称为操作码,因此即使它们未打包在一起,也将ADD或LDR称为参数,其他位称为参数。 MIPS具有记录的一个或两个操作码字段,但是将遵循IMO相同的规则,通常我个人会遵循该规则,但是由于混淆,我更喜欢使用术语指令来描述该指令的所有位/字节,并且是否选择调用这些操作码的子集,就这样吧。
但是,就像许多技术术语一样,存在各种各样的,绝对正确的,不同的定义,因为一个公司或某些技术的一个分支等在该领域内成功使用了该术语,但它们的定义却有所不同。即使在他们的小组中,定义也可能有点软,但这并没有使它不正确。就像使用任何一种语言一样,您需要在与他们交谈的小组中为与之交谈的小组调整其说话的内容和方式。您很少有一个单词的坚如磐石的定义,只需浏览字典,有多少个单词只有一个含义,而有两个或更多含义呢?