欢迎来到天天文库
浏览记录
ID:12636208
大小:49.00 KB
页数:3页
时间:2018-07-18
《硬件基础:x86技术窥探》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、硬件基础:X86技术窥探X86x86或80x86是英特尔Intel首先开发制造的一种微处理器体系结构的泛称。该系列较早期的处理器名称是以数字来表示,并以“86”作为结尾,包括Intel8086、80186、80286、80386以及80486,因此其架构被称为“x86”。由于数字并不能作为注册商标,因此Intel及其竞争者均在新一代处理器使用可注册的名称,如Pentium。现时Intel把x86-32称为IA-32,全名为IntelArchitecture,32-bit。不过由于x86包括16位的处理器,这样的命名也出现麻烦。历史x86架构于1978年]推出的Intel8086中央处理器
2、中首度出现,它是从Intel8008处理器中发展而来的,而8008则是发展自Intel4004的。8086在三年后为IBMPC所选用,之后x86便成为了个人计算机的标准平台,成为了历来最成功的CPU架构。其它公司也有制造x86架构的处理器,计有Cyrix(现为VIA所收购)、NEC集团、IBM、IDT以及Transmeta。Intel以外最成功的制造商为AMD,其Athlon系列处理器的市场仅次于Pentium。8086是16位处理器;直到1985年32位的80386的开发,这个架构都维持是16位。接着一系列的处理器表示了32位架构的细微改进,推出了数种的扩充,直到2003年AMD对于这
3、个架构发展了64位的扩充,并命名为AMD64(有时也被称作x86-64,x64或EM64T),推出了Opteron处理器家族,开创了x86的64位时代。值得注意的是Intel早在1990年代就与惠普合作提出了一种用在安腾系列处理器中的独立的64位架构,这种架构被称为IA-64。IA-64是一种崭新的系统,和x86架构完全没有相似性;不应该把它与AMD64或x86-64弄混。设计x86架构是重要地可变指令长度的CISC(复杂指令集计算机,ComplexInstructionSetComputer)。字组(word,4字节)长度的内存存取允许不对齐内存地址,字组是以低位字节在前的顺序储存在内
4、存中。向前兼容性一直都是在x86架构的发展背后一股驱动力量(设计的需要决定了这项因素而常常导致批评,尤其是来自对手处理器的拥护者和理论界,他们对于一个被广泛认为是是落后设计的架构的持续成功感到不解)。但在较新的微架构中,x86处理器会把x86指令转换为更像RISC的微指令再予执行,从而获得可与RISC比拟的超标量性能,而仍然保持向前兼容。在这篇简短的文章中出现的指令和缓存器助忆符号的名称,都在Intel文件种有所指定以及使用在Intel组译器中(和兼容的,比如微软的MASM、Borland的TASM、CAD-UL的as386等等)。一个以Intel语法指定的指令"moval,30h"与A
5、T&T语法的"movb$0x30,%al"相当,都是会被转译微两个位的机器码"B030"(十六进制)。你可以发现在这段程序中的"mov"或"al",都是原来的Intel助忆符号。如果我们想要的话,我们可以写一个组译器由程序代码'moveimmediatebytehexadecimallyencoded30intolowhalfofthefirstregister'(移动立即值位十六进制编码30到第一个缓存器的低半部位),来产生相同的机器码。然而,传统上汇编器一直使用Intel的助忆符号。x86汇编语言会在x86汇编语言文章中有更详细的讨论。真实模式Intel8086和8088有14个16
6、位缓存器。其中四个(AX,BX,CX,DX)是通用目的(尽管每个缓存器有额外的目的;举个例子:CX可以被用来当作loop(循环)指令的计数器。每个缓存器可以被当成两个分开的字节存取(因此BX的高位可以被当成BH以及低位BL)。除了这些缓存器,还有四个区段缓存器(CS、DS、SS、ES)。他们用来产生内存的寻址。还有两个指针缓存器(SP是指向堆栈的底部,BP可以用来指向堆栈或内存的其它地方)。两个指针缓存器(SI和DI)可以用来指向数组的内部。最后,有旗标缓存器(包含状态旗标比如进位、溢位、结果为零,等等)。以及IP是用来指向目前执行指令个地址。在真实模式下,内存的存取是被区段开来。为了得
7、到最后20位的内存地址,要将区段的地址往左移动4位,并且加上偏移的地址。因此,真实模式下总共可以寻址的空间是220字节,或者是1MB,于1979年是相当让人印象深刻的象征。在真实模式下有两种寻址模式:near和far。在far模式,区段跟偏移都需要被指定;在near模式,只需要偏移模式被指定,而内存区段是由适当的区段缓存器获得。以数据而言是使用DS缓存器,程序代码是CS缓存器,堆栈是SS缓存器。举个例子,如果DS是A000h且SI是
此文档下载收益归作者所有