- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
浮点栈结构剖析
浮点栈结构 FPU中包含一个浮点寄存器栈,它包含了8个80位的可以直接进行浮点运算的寄存器,浮点数以双精度格式存储在这些寄存器中,无论是单精度、双精度还是整数等,被load到这些个寄存器中后,都会转化为双精度。FPU指令在使用这些寄存器的时候,是以一种“栈”的方式来使用,叫做“浮点寄存器栈”,其结构如下图所示: 这个栈由8个可以直接进行浮点运算的寄存器组成,按照顺序编号为0-7。CPU在处理浮点运算的时候,将这些寄存器作为一个栈来使用。它是一个向下扩展的循环栈。我们知道,整点运算有个FLAG状态寄存器,同样,浮点运算部件中也有个浮点状态寄存器FFLAG,处理器利用浮点状态寄存器中的bit11-bit13三个bit来标记这个栈的栈顶位置(用top指针表示)。 浮点栈的工作原理 当程序向寄存器栈中装入数据的时候,top指针的值减1,然后将数据压入top指针指向的浮点寄存器中。 当top值为0的时候,下一次压栈则将数据压入7号浮点寄存器中,top指针被设置成7(也就是说浮点栈是一个循环栈)。 当需要将堆栈中的数据保存到内存中的时候(FST指令),则进行退栈操作。退栈操作与压栈类似,top指针增加1,若退栈前top值为7,则退栈后top为0(对于X87寄存器来说,一个load操作相当于push,一个store操作相当于pop)。 按照下面的逻辑,是不是只能够使用栈顶的浮点寄存器呢? 上述这些操作由硬件来完成,对用户是透明的,用户无须关心压栈和出栈操作以及top值这些细节,FPU提供了FLD,FST等访存指令和FADD等浮点运算指令以及其他一些辅助指令来操作浮点寄存器(可参考IA_32指令集手册)。用户可以通过FLD指令将内存中的浮点数据压入浮点寄存器栈,通过FADD指令进行一个加法运算,然后通过FST指令来保存结果并退栈。 用户通过指令对浮点数据操作的时候,这些浮点寄存器所呈现给用户的名字是ST[0],ST[1],ST[2]......ST[7]。但是,要注意,这里的ST[i]中的i并不是和上图中的编号一一对应的,而是离栈顶的距离。也就是说,ST[i]表示距离栈顶的第i个单元的寄存器。按照上面的图所示的状态,ST[0]为第3号寄存器,ST[1]为第4号寄存器,以此类推。 具体使用例子 FLD value1 ;(a) value1=5.6 FMUL value2 ;(b) value2=2.4 FLD value3 ; value3=3.8 FMUL value4 ;(c)value4=10.3 FADD ST(1) ;(d) 实际上,这些指令是完成了一个这样的操作: double Product = (5.6 x 2.4) + (3.8 x 10.3); 第一条指令(FLD value1)将top指针减1(压栈),将值5.6 从内存load到ST[0]寄存器,如下面的图中(a)所示。 第二个指令将ST(0)同内存中的valua2(2.4)相乘,并将结果存在ST[0]中。如(b)所示。 第三条指令将top减1,并将3.8 load到ST[0]中。 第四条指令将ST[0]中的值同内存中的value4(10.3)相乘,并将结果存储在ST[0]中,如(c)所示。 第五条指令将ST[0]中的值同ST[1]中的值相加,把结果存放到ST[0]中,如(d)所示。 几个问题 溢出怎么办?怎么防止栈顶覆盖栈底呢?对空栈退栈操作和对满栈入栈操作可以吗? FPU还提供了一个标记寄存器tag,这个寄存器记录了每个浮点寄存器的状态,当装入数据的时,硬件会将寄存器中相应的tag置为有效,反之置为空。当压栈时遇到已经标为有效的寄存器时,产生上溢;如果退栈时,遇到相应tag为空时,则产生下溢,处理器会触发相应的异常来进行处理。 * *
您可能关注的文档
- 浙江省温州市普通高中2017届高三8月选考模拟考试技术试题(word版)剖析.doc
- 浙江省计算机二级办公软件高级应用word2010综合题操作步骤剖析.docx
- 浙江省计算机二级办公软件高级应用word2010单项题操作提示剖析.doc
- 浙江省科技型中小企业申报系统(企业)-使用说明书剖析.doc
- 浙江省诸暨市海亮初级中学2016届九年级第二学期3月质量检测科学试卷(无答案)剖析.doc
- 浙江省金丽衢十二校2016届高三物理上学期第一次联考试题剖析.doc
- 家乡植物精选.ppt
- 浙江省金华市2015年中考科学试题(word版,含答案)剖析.doc
- 浙江省金华市东阳市东阳中学2016-2017学年高二上学期期中考试生物试卷剖析.doc
- 浙江省金华市婺城区2016届九年级数学上学期期末考试试题(含解析)新人教版剖析.doc
最近下载
- 《矿山企业温室气体排放核算方法与报告指南(试行)》.docx
- JGJ_T496-2022 房屋建筑统一编码与基本属性数据标准.docx
- [金属冶金标准]GBT 14506.8-2010 硅酸盐岩石化学分析方法 第8部分:二氧化钛量测定.pdf
- 掘进安全管理课件.pptx
- 钢平台验收记录表.docx
- IPC-2221C-EN TOC2023印制版设计通用标准 Generic Standard on Printed Board Design.pdf
- 小学数学《图形的运动》作业设计.docx
- 看课件-成人气道异物梗阻救护.ppt
- 中职旅游类《前厅服务与管理》职教高考必备试题库(含答案).docx
- 公务员平时考核评鉴表(空表).pdf VIP
文档评论(0)