x86操作码是武断的吗?

Rob*_*225 4 x86 assembly machine-code

x86操作码是否是任意的?

有没有原因hlt是0xf4和nop0x90?

Ira*_*ter 9

该架构的非常早期版本(8008,8080)是使用极少量的晶体管/逻辑门实现的.

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

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

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

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

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

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

现代x86芯片使用指令格式的功能非常令人惊叹,但它确实有效.