x86操作码是否是任意的?
是否有hlt
为0xf4且nop
为0x90的原因?
答案 0 :(得分:9)
这种架构的早期版本(8008,8080)是使用极少量的晶体管/逻辑门实现的。
那时,我确信设计人员以易于解码的方式选择操作码和指令格式(例如,门数最少)。说明书往往很简单,而且格式规则。
(我知道我在20世纪70年代设计了一个16位CPU。英特尔可能做得更好,但他们总是匆忙。我的CPU坚持4位操作码0000和1111无效并导致陷阱;这可以防止数据在大多数情况下被意外执行,因为积分值往往都是零或者顶部的全部为零。
成功和竞争需要进化和添加新功能。发明/添加新指令一直存在压力,使CPU能够更快更好地完成任务:浮点数,32位数据,更多寄存器,SIMD操作,加密......
随着新一代处理器的出现,随着晶体管预算的增加,设计师试图添加新指令时会发生两件事:
通过十几代CPU重复这个过程,直到你达到现代,拥有数十亿晶体管芯片。现在添加的指令更具异国情调,模式变得更加复杂。它看起来很随意;它不是,但它也没有干净的设计。
现代x86芯片对指令格式的作用非常惊人,但它确实有效。