
英特尔
指令集如今仅剩下一张纸了,水上水下都存在着庞大的既有基础设施。其实,这并非
英特尔首次想要整体甩掉兼容包袱,至少已经是第四次了。80年代末有过两次尝试。80376去掉了实模式,上电就进入保护模式,它外部用16位数据线,性能比纯32位的386dx差一点;i860更绝,指令和x86不兼容,内部有fpu和向量单元。第三次尝试是安腾。这些尝试的成果最后都成了x86的强化内容,i860为mmx和sse提供了经验,安腾在让工程师们饱受折磨后,使编译技术有了很大的提高。x86发展了数十年,陈旧特性会被去除或回收,并非
中学课本中那般臃肿的刻板样子。Intel和
AMD一直在弥补x86的先天缺陷,实现兼容模式和老旧指令所消耗的资源占比极少。就像808x里有个pop cs指令,它的机器码是0x0f(8'b0000_1111),但不到两年,在面向嵌入式的8018x中就被去掉了。这是因为该指令执行后会马上修改程序计数器,要是不精心安排代码段的地址布局,使得新的cs:ip恰好指向有意义的指令,机器就会出现无法预料的问题,轻的话会报非法指令,严重的话会乱执行代码从而破坏系统。
自486后期起,这个字节被用作escape码,以引出2字节和3字节长度的操作码。
图中的0x4x这一行的inc/dec被回收当作rex前缀,在64位模式下用于访问r8 - r15寄存器。同时,ah、ch、dh、bh这四个8位寄存器名称被删除,转换为spl、bpl、sil、dil,如此就能整齐地访问从a到r15的低8位了。

中学
要缩减指令长度、提高密度以改善取指性能,关键是解决1字节操作码的浪费情况,还有分页模式对整个内存子系统的制约。