萤窗小语 https://bbs.21ic.com/?217036 [收藏] [复制] [RSS] 前进的路上,有我,有你...

日志

Intel X86(二)

已有 515 次阅读2007-8-31 15:31 |个人分类:X86|系统分类:嵌入式系统| Intel, X86

X86



来自ITwiki,开放的信息技术大百科



x8680x86是英特尔Intel首先开发制造的一种微处理器体系结构的泛称。

该系列较早期的处理器名称是以数字来表示,并以“86”作为结尾,包括Intel 8086801868028680386以及80486,因此其架构被称为“x86”。由于数字并不能作为注册商标,因此Intel及其竞争者均在新一代处理器使用可注册的名称,如Pentium。现时Intel把x86-32称为IA-32,全名为Intel Architecture, 32-bit。不过由于x86包括16位的处理器,这样的命名也出现麻烦。







目录

[隐藏]





历史


x86架构于1978年]推出的Intel 8086中央处理器中首度出现,它是从Intel 8008处理器中发展而来的,而8008则是发展自Intel 4004的。8086在三年后为IBM PC所选用,之后x86便成为了个人计算机的标准平台,成为了历来最成功的CPU架构。


其它公司也有制造x86架构的处理器,计有Cyrix(现为VIA所收购)、NEC集团、IBM、IDT以及Transmeta。Intel以外最成功的制造商为AMD,其Athlon系列处理器的市场仅次于Pentium


8086是16位处理器;直到1985年32位的80386的开发,这个架构都维持是16位。接着一系列的处理器表示了32位架构的细微改进,推出了数种的扩充,直到2003年AMD对于这个架构发展了64位的扩充,并命名为AMD64(有时也被称作x86-64x64EM64T),推出了Opteron处理器家族,开创了x86的64位时代。


值得注意的是Intel早在1990年代就与惠普合作提出了一种用在安腾系列处理器中的独立的64位架构,这种架构被称为IA-64。IA-64是一种崭新的系统,和x86架构完全没有相似性;不应该把它与AMD64x86-64弄混。



设计


x86架构是重要地可变指令长度的CISC(复杂指令集计算机,Complex Instruction Set Computer)。字组(word, 4字节)长度的内存存取允许不对齐内存地址,字组是以低位字节在前的顺序储存在内存中。向前兼容性一直都是在x86架构的发展背后一股驱动力量(设计的需要决定了这项因素而常常导致批评,尤其是来自对手处理器的拥护者和理论界,他们对于一个被广泛认为是是落后设计的架构的持续成功感到不解)。但在较新的微架构中,x86处理器会把x86指令转换为更像RISC的微指令再予执行,从而获得可与RISC比拟的超标量性能,而仍然保持向前兼容。


在这篇简短的文章中出现的指令和缓存器助忆符号的名称,都在Intel文件种有所指定以及使用在 Intel组译器中(和兼容的,比如微软MASMBorland的TASM、CAD-UL的as386 等等)。一个以Intel语法指定的指令"mov al, 30h"与AT&T语法的"movb $0x30, %al"相当,都是会被转译微两个位的机器码"B0 30"(十六进制)。你可以发现在这段程序中的"mov"或 "al",都是原来的Intel助忆符号。如果我们想要的话,我们可以写一个组译器由程序代码'move immediate byte hexadecimally encoded 30 into low half of the first register'(移动立即值位十六进制编码30到第一个缓存器的低半部位),来产生相同的机器码。然而,传统上汇编器一直使用Intel的助忆符号。


x86汇编语言会在x86 汇编语言文章中有更详细的讨论。



真实模式


Intel 8086和8088有14个16缓存器。其中四个(AX, BX, CX, DX)是通用目的(尽管每个缓存器有额外的目的;举个例子:CX可以被用来当作loop循环)指令的计数器。每个缓存器可以被当成两个分开的字节存取(因此BX的高位可以被当成BH以及低位BL)。除了这些缓存器, 还有四个区段缓存器(CS、DS、SS、ES)。他们用来产生内存的寻址。还有两个指针缓存器(SP是指向堆栈的底部, BP可以用来指向堆栈或内存的其它地方)。两个指针缓存器(SI和DI)可以用来指向数组的内部。最后,有旗标缓存器(包含状态旗标比如进位溢位、结果为零,等等)。以及IP是用来指向目前执行指令个地址。


在真实模式下,内存的存取是被区段开来。为了得到最后20位的内存地址,要将区段的地址往左移动4位,并且加上偏移的地址。因此,真实模式下总共可以寻址的空间是220字节, 或者是1MB,于1979年是相当让人印象深刻的象征。在真实模式下有两种寻址模式:near和far。在 far模式,区段跟偏移都需要被指定;在near模式,只需要偏移模式被指定,而内存区段是由适当的区段缓存器获得。以数据而言是使用DS缓存器,程序代码是CS缓存器,堆栈是SS缓存器。举个例子,如果DS是A000h且SI是5677h,DS:SI会指向计忆体的绝对地址DS × 16 + SI = A5677h


在这种架构下,两对不同的区段/篇移可以指向一个相同的绝对地址。因此如果DS是A111h且SI是4567h,DS:SI会指向跟上一段相同的A5677h。除了duplicity之外,这种架构无法同时一次拥有4个以上的区段。此外,CS、DS和SS是为了程序正确功能而必须的,因此仅仅只有ES可以被用来指向其它的地方。这种模式原本是为了与Intel 8085兼容,导致程序设计师永无止尽的痛苦。


除了以上所说的,8086也拥有8-bit的64K(另一种说法是16-bit的32K)输出输入en:I/O)空间,以及一个由硬件支持的64K(一个区段)内存堆栈。只有words(2字节)可以被推入到堆栈中。堆栈是由内存的上端往下成长,他的底端是由SS:SP指向。有256个中断interrupts),可以由硬件或是软件同时组成。中断是可以串连在一起,使用堆栈来储存返回被中断的程序地址。



16位保护模式


Intel 80286可以在不改变任何东西下支持8086的真实模式16位软件,然而它也支持额外的工作模式称为保护模式,可以将可寻址的物理内存扩充到16MB,可寻址的虚拟内存最大到 1GB。这是使用节区缓存器来储存在节区表格中的索引值。处理器中有两个这样的表格,分别为GDTLDT,每一个可以储存最多8192个节区的描述子,每一个节区可以给予最大到64KB的内存存取。节区表格提供一个24位的基地址(base address),可以用此基地址增加想要的偏移量来创造出一个绝对地址。此外,每一个节区可以被赋予四种权限等级中的一种(称为 "rings")。


尽管这个推出的功能是一项进步,但是他们并没有被广泛地使用,因为保护模式的操作系统无法执行现有的真实模式软件。这样的能力只有在随后80386处理器的虚拟86模式中出现。


在同时,操作系统比如OS/2尝试使用类似乒乓的方法,让处理器在保护和真实模式间切换。这样都会让计算机变慢且不安全,像是在真实模式下的程序可以轻易地使计算机当机。OS/2也定义了限制性的程序设计规则允许"Family API"或"bound"程序可以在真实模式或保护模式下执行。然而这是给原本为保护模式下设计的程序有关,反之则不然。保护模式程序并不支持节区选择子和物理内存之间的关系。有时候会错误地相信在16位保护模式下执行真实模式的程序,导致IBM必须选择使用Intel保留给BIOS的中断呼叫。事实上这类的程序使用任意的选择子数值和使用在上面提到的“节区运算”的方式有关。


这个问题也在Windows 3.x上出现。这个推出版本想要在16位保护模式下执行程序,而先前的版本只能在真实模式下执行。理论上,如果Windows 1.x或2.x程序是写得“适当”且避免使用节区运算的方式,它就有可能在真实和保护模式两者下执行。Windows程序一般来说都会避免节区运算,这是因为Windows实作出软件的虚拟内存方式,及当程序不执行时候,搬移内存中的程序代码和数据,所以操作绝对地址的方式是很危险的;当程序不执行时,被认为要保持内存区块的“handles”,这样的handles已经非常相当于保护模式的选择子。在保护模式下的Windows 3.0执行一个旧的程序,会触发一个警告对话盒,建议在真实模式下执行Windows(推测还是仍然可以使用扩充内存,可能是在80386机器用EMM386模拟,因此它并不被局限于640KB)或是从厂商那更新到新的版本。好的行为之程序可能可以使用特别的工具来避免这样的对话盒。不可能有些GUI程序在16位保护模式下执行,且其它GUI程序在真实模式执行,可能是因为这会需要两个分开的环境且会依于前面所提到的处理器在两个模式间的乒乓效应。从Windows 3.1版开始,真实模式就消失了。



32位保护模式


Intel 80386推出后,也许是到目前为止x86架构的最大跃进。除了需要值得注意的Intel 80386SX32位架构但仅只有24位寻址(和16位数据总线)。除此之外其它架构都是32位 - 所有的缓存器指令集、输出输入空间和内存寻址。为了能够在后者所说的功能工作,要使用32位扩充的保护模式。然而不像286、386所有的区段可以使用32位的偏移量,即使内存空间有使用区段,但也允许应用程序存取超过4GB空间而不需要区段的分隔。此外,32位保护模式提供分页的支持,是一种让虚拟内存得以实现的机制。


没有新的通用缓存器被加入。所有16位缓存器除了区段缓存器外都扩充为32位。Intel在缓存器的助记符号上加入“E”来表示(因此扩充的AX变成EAX,SI变成ESI,依此类推)。因为有更多的缓存器数量、指令、和运算单元,因此机器码的格式也被扩充。为了提供与先前的架构兼容,包含执行码的区段可以被标示为16或是32位的指令集。此外,特殊的前置符号也可以用来在16位的区段包含32位的指令码,反之亦然。


分页跟区段的内存存取是为了支持现在多任务操作系统所必须要的。Linux386BSDWindows NTWindows 95都是一开始为386所发展,因为它是第一颗提供可靠地程序分离内存空间的支持(每个程序拥有自己的寻址空间)以及可以在必要的情况下打断他们程序的执行(使用ring,一种x86保护模式下权力分级的名称)。这种386的基本架构变成未来所有x86系列发展的基础。


Intel 80386数学辅助运算处理器也在整合到这个CPU之后的x86系列中,也就是Intel 80486。新的FPU可以帮助浮点数运算,对于科学计算和图形设计是非常重要。



MMX和之后


1996年Intel的MMX(AMD认为这是矩阵数学扩充Matrix Math Extensions的缩写,但大多数时候都被当成Multi-Media Extension,而Intel从来没有官方宣布过词源)技术出现。尽管这项新的科技得到广泛宣传,但它的精髓是非常简单的:MMX定义了八个64位SIMD缓存器,与Intel Pentium处理器的FPU堆栈有相重迭。不幸的是,这些指令无法非常简单地对应到由原来C编译器所产生的指令码中。MMX也只局限于整数的运算。这项技术的缺点导致MMX在它早期的存在有轻微的影响。现今,MMX通常是用在某些2D影片应用程序中。



3DNow!


1997年AMD推出3DNow!,是对于MMX的SIMD的浮点指令增强(针对相同的 MMX 缓存器)。尽管这些也没有解决编译器的难题,但这项技术的推出符合了PC上的3D休闲娱乐应用程序之崛起。3D游戏开发者和3D绘图硬件制造商在AMDAMD K6Athlon系列处理器上,使用3DNow!来帮助增加他们的效能。



SSE


1999年Intel推出SSE指令集,增加了八个新的128-bit缓存器(不跟其它的缓存器重迭使用)。这些指令类似于AMD的3DNow!,主要是增加浮点数运算的SIMD指令。



SSE2


2001年Intel推出SSE2指令集,增加了:1)完整地补充了整数指令(与MMX相似)到原来的SSE缓存器,和2)64位的SIMD浮点运算指令到原来的SSE缓存器。第一个的增加导致MMX几乎是过时可以舍弃的),第二个则允许这些指令可以让传统的编译器现实地产生。



SSE3


2004年随着Pentium 4处理器的改版Prescott推出。SSE3增加特定的内存和thread-handling指令来提升Intel超执行绪的效能,在科学计算方面也有增强。



64位


2002年,由于32位特性的长度,x86的架构开始到达某些设计的极限。这个导致要处理大量的信息储存大于4GB会有困难,像是在数据库或是影片编辑上可以发现。


Intel原本已经决定在64位的世代完全地舍弃x86兼容性,推出新的架构称为IA-64技术作为他的Itanium处理器产品线的基础。IA-64与x86的软件天生不兼容;它使用各种模拟形式来执行x86的软件,不过,以模拟方式来运行的效率十分低下,并且会影响其它程序的运行。


AMD主动把32位x86,或称为IA-32扩充为64位。它与一个称为AMD64的架构出现(在重新命名前也称为x86-64),且以这个技术为基础的第一个产品是OpteronAthlon 64处理器家族。由于AMD64处理器产品线的成功,Intel采取AMD64指令集且增加某些新的扩充到他们自己的产品,命名为EM64T架构(显然地他们不想承认这些指令集是来自它的主要对手)。


这是由非Intel的制造商所发起和设计的第一次重大的x86架构升级。也许更重要的,它也是第一次Intel实际上从外部来源接受这项本质的技术。





虚拟


虚拟x86是很困难的,因为它的架构并无达到Popek and Goldberg virtualization requirements。然而,有好几个商业的虚拟x86产品,比如VMware微软Virtual PC。Intel和AMD两者都有公开宣布未来的x86处理器将会有新的增强来容易达到更有效率的虚拟。Intel针对这项虚拟特性的代号称为"Vanderpool"和"Silvervale";AMD则使用"Pacifica"这个代号。



生产商


有多间公司设计、生产并售卖x86处理器及其兼容产品,其中包括:




路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)