初探处理器体系结构及寻址模式.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
初探处理器体系结构及寻址模式.doc

摘自 /jn1158359135/article/details/7055317 由8086/8088、x86、Pentium发展到core系列短短40年间,处理器的时钟频率几乎已接近极限,尽管如此,自从86年Intel推出386至今除了增加一些有关流媒体的指令如mmx/sse之外,其他新增的大多数指令都可以从最初的指令集中组合实现同样的功能,整个编程模型维持了约有20多年。 1、处理器体系结构下的编程模型 首先概要的介绍下程序设计模型: 图1-1 图1-2 以上所列出的一些通用寄存器(注:其中RSP为专用寄存器,之所以把它放在通用寄存器组中只是为了方便记忆整个模型),除了数据位宽度不同之外,并无多大差别: RAX(累加器):RAX如果是8/16/32位寻址,则只改变该寄存器的一部分。累加器用于乘法、除法及一些调整指令,同时也可以保存存储单元的偏移地址。 RBX(基址):用于保存存储单元的偏移地址,同时也能寻址存储器数据,作为偏移地址访问数据时默认使用数据段基址DS作为段前缀。 RCX(计数):可保存访问存储单元的偏移地址,或在串指令(REP/REPE/REPNE)以及移位、循环和LOOP/LOOPD指令中用作计数器。 RDX(数据):可使用RDX/EDX/DX/DH/DL寻址,同时作为通用寄存器也用于保存乘法形成的部分结果或者除法之前的部分被除数,也可用于寻址存储单元。 RBP(基指针):可用RBP/EBP/BP寻址,同时作为偏移地址访问存储单元时默认使用堆栈段基址SS作为段前缀。 RDI(目的变址):可用RDI/EDI/DI寻址,常用于在串指令中寻址目的数据串。 RSI(源变址):如RDI一样,RSI也可作为通用寄存器使用,通常为串指令寻址源数据串。 段寄存器CS、DS、ES、SS、FS、GS以及RSP为专用寄存器,以下是这些寄存器的概要描述: RSP(堆栈指针):RSP寻址称为堆栈的存储区,通过该指针存取堆栈数据。用作16位寄存器时使用SP,如果是32位则为ESP。 CS(代码段):代码段寄存器存放程序所使用的代码在存储器中的基地址。 DS(数据段):存放数据段的基地址。 ES(附加段):该段寄存器通常在串指令(LODS/STOS/MOVS/INS/OUTS)中使用,主要用于在存储器中将数据进行成块转移。 SS(堆栈段):为堆栈定义一个存储区域。主要用来存放过程调用所需参数、本地局部变量以及处理器状态等。 FS与GS:这两个段寄存器是386~Core2中新增的段寄存器,以允许程序访问附加的存储器段。可以将其视为“通用的段寄存器”,通过将段的基地址存入这两个寄存器中可以实现自定义的寻址操作,从而增加了编程的灵活性,不过我们一般不用这两个寄存器,仅作了解即可。 图1-3 如上图所示,在Pentium4及更高型号处理器中增加了R8~R15这8个64位通用寄存器,这些新增的64位寄存器仍支持按字节、字、双字或四字方式寻址,而不同之处在于只有最右边的数据位可以用来作为单独的一个字节/字等。注意在使用这些新增寄存器的其中一个部分时需要在寄存器末尾添加控制字,例如: [plain]?view plaincopy mov?R11D,?R8D?;其中字母D用于表示双字访问?? ;也可以将D改为B或者W,B表示字节访问,W表示字访问?? ;如果不加任何控制字则使用整个寄存器??? 图1-4 RIP寻址代码段中当前执行指令的下一条指令,当处理器工作在实模式下时使用16位的IP寄存器,当工作于保护模式时则使用32位的EIP。指令指针可由转移指令或调用指令修改。需要注意的是,在64位模式中由于处理器包含40位地址总线,所以总共可以寻址240=1TB的内存。 有关EFLAGS寄存器的详细介绍参见x86-EFLAGS寄存器详解一文。 2、寻址模式 x86主要存在2种寻址模式,分别为实模式与保护模式。在实模式中,通常寻址时都是通过段寄存器(如图1-2所示)+通用寄存器(如图1-1所示),即基址+变址的方式进行寻址。举例如下: [plain]?view plaincopy mov?ax,?ds:[bx]??;如ds:[bx]所示为段寄存器+通用寄存器的方式进行寻址?? ;因为在使用通用寄存器寻址时默认使用数据段寄存器,因此上述指令等价于?mov?ax,?[bx]?? 以下是关于三类地址的概要描述: 逻辑地址:由段和偏移量组成,偏移量指明了从段开始到实际地址之间的距离。如上例中ds为段,而bx则为偏移量。 线性地址:一个32位无符号整数,用来表示内存地址空间。 物理地址:用于内存芯片单元寻址的实际地址,从处理器的地址引脚发送到内存总线上,实际即为高低电平信号。由于PC的内存容量为4GB,因此物理地址由32位无符号整数表示。 无论是逻辑地址还是线

文档评论(0)

000 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档