
TLDR,x86系列处理器均具有向后兼容的设计。为新CPU设计的算术和读/写指令仍然可以执行为旧CPU设计的指令,还可以执行新指令,例如64位加减法

历史上,x86指令集可以追溯到1970年代中期,这是Intel的第一个8086处理器。 CPU上的常规16位(2字节)寄存器称为AX BX CX DX。 8086还允许开发人员独立访问寄存器的高低位,例如AH和AL

当英特尔开始开发具有新功能的处理器时,他们希望与8086及任何后续处理器向后兼容。因此,英特尔没有取代原始寄存器,而是扩展了寄存器。 EAX EBX ECX EDX的大小,其中E表示扩展。 AX寄存器只是EAX寄存器的低16位,仍然可以在新处理器中访问。

英特尔的64位处理器也使用相同的逻辑:32位EAX扩展为64位RAX,仍然可以使用addl subl和l orl操作等指令在32位寄存器上执行x86_64汇编语言。代表long,当然对应的64位运算是addq subq和q orq,其中q代表4个字(1个字等于2个字节)

但是即使指令集兼容,也需要一些方法来区分64位32位16位代码。在从32位到64位的过渡中,64位使用独立的长模式(而不是扩展保护模式。有关详细信息,请参阅Wikipedia表:x86-64-Wikipedia)以标识64位指令序列。当执行32位代码时,它将切换到兼容模式。此时,CPU将识别32位格式的指令。请注意,此时没有模拟指令操作,仅切换子模式(例如在启动过程中从未启用长模式)
但是,毕竟系统内核仍处于长模式,因此,在以兼容模式运行的用户空间进程中发生中断或系统调用时,它将切换回长模式并跳转到内核的中断处理功能或系统调用的切入点是,无需仿真即可运行32位程序:硬件级别支持32位用户进程,而64位内核则以与纯32位系统调用相同的机制进行有效交互。
大多数支持x86_64的主流操作系统将默认支持运行32位x86二进制文件(提供支持32位系统调用的相关库和接口)。目前,系统调用几乎没有额外的开销。在Windows中,这称为WoW(Windows在Windows 64)
值得注意的是,64位机器代码的设计可能与16/32位机器代码完全不同。它们看起来像这样的主要原因是CPU可以在不同模式之间共享大多数机器代码解码电路。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-320804-1.html
建议中国放开2胎政策
反而给中国扶持出强大的敌人