x86操作码是武断的吗?

时间:2016-08-28 04:07:29

标签: assembly x86 machine-code

x86操作码是否是任意的?

是否有hlt为0xf4且nop为0x90的原因?

1 个答案:

答案 0 :(得分:9)

这种架构的早期版本(8008,8080)是使用极少量的晶体管/逻辑门实现的。

那时,我确信设计人员以易于解码的方式选择操作码和指令格式(例如,门数最少)。说明书往往很简单,而且格式规则。

(我知道我在20世纪70年代设计了一个16位CPU。英特尔可能做得更好,但他们总是匆忙。我的CPU坚持4位操作码0000和1111无效并导致陷阱;这可以防止数据在大多数情况下被意外执行,因为积分值往往都是零或者顶部的全部为零。

成功和竞争需要进化和添加新功能。发明/添加新指令一直存在压力,使CPU能够更快更好地完成任务:浮点数,32位数据,更多寄存器,SIMD操作,加密......

随着新一代处理器的出现,随着晶体管预算的增加,设计师试图添加新指令时会发生两件事:

  • 现有的指令集已经定义了一堆模式,并且这些模式无法更改。因此,设计新的操作码,指令格式和操作数,必须加入到"空洞"在指令集中。这种强制特殊的位组合用于各种指令
  • 更多晶体管的可用性意味着解码复杂的位模式不是一个问题,因此选择奇怪的位组合并解码它们很简单。

通过十几代CPU重复这个过程,直到你达到现代,拥有数十亿晶体管芯片。现在添加的指令更具异国情调,模式变得更加复杂。它看起来很随意;它不是,但它也没有干净的设计。

现代x86芯片对指令格式的作用非常惊人,但它确实有效。