(1)x86的由来

x86架构首度出现在1978年推出的Intel 8086中央处理器,它是从Intel 8008处理器中发展而来的,而8008则是发展自Intel 4004的。在8086之后,Intel又推出了包括80186、80286、80386以及80486。

在设计上,这些后续的处理器使用的指令集都是在8086的基础上添加新支持的指令进行改进的,因此可以说都是向下兼容(backward compatibility)的,即能在8086上运行的程序在80486上也一定能运行。

向下兼容(Downward Compatibility),又称作向后兼容(Backward Compatibility),指在一个程序或者类库更新到较新的版本后,用旧的版本程序创建的文档或系统仍能被正常操作或使用,或在旧版本的类库的基础上开发的程序仍能正常编译运行的情况。例如较高档的计算机或较高版本的软件平台可以运行较为低档计算机或早期的软件平台所开发的程序

由于都是以86结尾(不过8088也是x86),所以把这一系列的指令集,称之为x86指令集(架构)。准确的来讲,x86这一术语并不是指的某一个(具体CPU使用的)具体的指令集,而是在8086(的指令集)基础上发展而来的所有指令集的泛称

x86与CPU的位数无关,包括16位、32位、64位的CPU。

实际上,在80486以后Intel推出的绝大多数CPU都是x86的,包括Pentium 、Pentium Pro 、Pentium MMX ,Pentium 2 ,还有后面的Pentium 3、Pentium 4 、Pentium D 、Core 全系列,(x86系列的) Xeon。另外,使用x86架构的处理器制造商远非Intel一家,最著名的就是AMD,其他的还有VIA、Cyrix。

(2)x86-32(x86、i386、IA-32)

从1985年80386开始,intel通过对x86架构进行32位的扩展,实现了32位CPU,而之前的都是16位。Intel把支持32位的 x86指令集架构命名为ia-32(Intel Architecture 32bit)。实际上由于32位x86处理器的统治性,术语“x86”几乎等于IA-32,即32位的x86x86-32,例如 Windows 和 Linux发行版的32位版本命名都是x86(而不是x86-32或IA-32)。后来的“x86-64”名称也继续强化了这种约定方式。

这里还是要强调, x86是一系列架构的泛称,支持16位、32位和64位的指令都有。

(3)x86-64(x64、AMD64)

该来的还是会来,在1999年,AMD宣布了x86-64架构。其实现方式与之前的80386思路一致,继续对IA-32扩展,增加64位通用寄存器、证书预算单元和逻辑操作,支持64位虚地址,向前兼容ia-32。大专栏  【Hardware】i386、x86和x64的故事/p>

2003年第一款x86-64处理器发布,AMD Operon。同时AMD也将x86-64正式命名为AMD64。这下Intel彻底2B了,以前都是AMD小弟追随者Intel大哥的脚步,如今AMD先实现了64位民用桌面级CPU。

其实Intel也有其64位计划,在2004年的IDF上,Intel承认其64 位计划,命名为ia-32e,即ia-32 extension,之后又改成EM64T,Extended Memory 64 Technology,最终命名为Intel64。 实际上EM64T与AMD64几乎相同。早期EM64T不兼容AMD64的少量指令,但是由于AMD在64位技术中的领先地位,Intel2005年不得不宣布将完全兼容AMD64。

所以现在装的64位版本操作系统从没有说是面向Intel还是AMD的。不过在称谓上,大多数厂商还是使用x86-64x86_64x64,或者AMD64)来称呼此架构,从而保持中立。

2.关于32和64的说明

(1)操作系统

  • 32位的操作系统:32位的操作系统可以运行在32位 or 64位的CPU上。
  • 64位的操作系统:只有64位的 CPU 才能运行64位的操作系统,当然现在市面上几乎所有消费级CPU都已经是64位的了。

32位的操作系统只能支持最大4GB的内存。这意味着,如果你安装多于4GB的内存条,那么超过4GB的那部分并不会被操作系统所使用。

(2)应用程序

  • 32位的应用程序:32位的应用程序可以运行在32位 or 64位的操作系统上。
  • 64位的应用程序:64位的应用程序只能运行在64位的操作系统上。

3.参考

【Hardware】i386、x86和x64的故事的更多相关文章

  1. cmake编译(编译目标)x86或x64

    if(CMAKE_CL_64)    #CMAKE的内建变量,如果是true,就说明编译器的64位的,自然可以编译64bit的程序 set(ADDRESS_MODEL 64) set(NODE_TAR ...

  2. cmake构建时指定编译器架构(x86 or x64)

    vs2015 x64编译器为例,cmake命令如下: cmake -G "Visual Studio 14 Win64" path\to\source\dir 去掉Win64,就是 ...

  3. Mixing x86 with x64 code (混合编写x86和x64代码)

    几个月前我小小的研究了在WOW64下的32位进程中运行native x64代码. 第二个设想是在64位进程下运行x86代码.它们都是可以的,如我google的一样, 已经有人在使用这两种方法了: ht ...

  4. X86和X64环境下的基本类型所占用的字节大小

    同样的程序代码,使用Visual Studio 进行编译,当目标平台分别为x86或x64环境时,其编译结果是不同的.在x86环境下,指针都是4个字节的:而在x64环境下,指针都是8字节的.测试代码如下 ...

  5. win32和x86以及x64的区别

    本来是知道x86和x64的区别的. 今天突然在VS2008上看到一个win32的选项,一下子懵了,这是什么玩意. 百度之,发现答案 win32是指windows 32位的操作系统,顾名思义是支持32为 ...

  6. 关于C#编写x86与x64程序的分析

    电脑硬件CPU可以分为x86与x64, x86的机器只能安装32位的操作系统,如XP, WIN7_86, x64的机器既可以安装32位的系统,又可以安装64位的系统,只是在x64的机器上安装32位的系 ...

  7. 使用CefSharp在C#访问网站,支持x86和x64

    早已久仰CefSharp大名,今日才得以实践,我其实想用CefSharp来访问网站页面,然后抓取html源代码进行分析,如果使用自带的WebBrowser控件,可能会出现一些不兼容js的错误. Cef ...

  8. Visual Studio中Debug与Release以及x86、x64、Any CPU的区别

    Visual Studio中Debug与Release的区别: 在Visual Studio中,编译模式有2种:Debug与Release.这也是默认的两种方式,在新建一个project的时候,就已经 ...

  9. VS2012在win7 64位机中x86和x64下基本类型的占用空间大小(转)

    VS2012在win7 64位机中x86和x64下基本类型的占用空间大小 #include "stdafx.h" #include <windows.h> int _t ...

随机推荐

  1. 15 docker 网络 docker 容器之间的关系 docker link

    1.案例:使用 link 关联后台与数据库 创建 test1 容器 docker run -d --name test1 busybox /bin/sh -c "while true; do ...

  2. js 选中div中的文本

    function selectText(element) { var text = document.getElementById(element); if (document.body.create ...

  3. DRF框架之ModelSerializer序列化器

    ModelSerializer是Serializer的子类,序列化和反序列化跟Serializer一样. ModelSerializer与常规的Serializer相同,但提供了: 基于模型类自动生成 ...

  4. iOS个人中心渐变动画、微信对话框、标签选择器、自定义导航栏、短信验证输入框等源码

    iOS精选源码 简单的个人中心页面-自定义导航栏并予以渐变动画 程序员取悦女票的正确姿势---Tip1(iOS美容篇) iOS 前台重启应用和清除角标的问题 微信原生提醒对话框3.0 JHLikeBu ...

  5. 嵌入式开发为什么选择C语言作为开发语言?

    了解嵌入式开发的朋友们都非常的清楚其核心的开发语言为C语言,C语言在嵌入式开发的过程中占有十分重要的地位,可以说两者之间“你中有我,我中有你”.但是有很多人会想,有那么多的开发语言为什么会单单的选择C ...

  6. 吴裕雄--天生自然 pythonTensorFlow图形数据处理:队列操作

    import tensorflow as tf #1. 创建队列,并操作里面的元素. q = tf.FIFOQueue(2, "int32") init = q.enqueue_m ...

  7. 解决UITextView无法滚到底部

    程序中有一个UITextView控件 @property (weak, nonatomic) IBOutlet UITextView *textView; 一般情况下,以下代码可实现UITextVie ...

  8. drf框架概况-resful接口规范-请求模块-渲染模块-Postman-drf请求生命周期

    drf框架 全称:django-rest- framework 知识点: """ 1.接口:什么是接口.restful接口规范 2.CBV生命周期源码-基于restful ...

  9. Winform下编译Dev控件时提示license.licx文件错误

    有时候,用vs2005或2008,用到第3方控件的时候会自动生成licenses.licx.我用的是devexpress.在程序运行的时候总是出现dev的画面,很烦.在网上找了找,找到去掉画面的方法: ...

  10. SpringBoot系列——WebMvcConfigurer介绍

    在上篇文章中,我们遇到了接口WebMvcConfigurer.今天就来大概看一下里面的方法都有什么吧. 为什么要使用WebMvcConfigurer? WebMvcConfigurer是一个接口,提供 ...