首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基本FPU指令/堆栈概述?

基本FPU指令/堆栈概述?
EN

Stack Overflow用户
提问于 2011-07-21 01:13:48
回答 2查看 551关注 0票数 3

我正在尝试对x86上的浮点运算有一个基本的了解。我知道我们有一个带有堆栈的专用FPU,但我找不到太多关于堆栈在不同指令下如何工作的相关信息。

基本上,fpu寄存器的寻址让我感到困惑。如果我指的是st(#),我说的是特定的寄存器吗?或者它是堆栈顶部的偏移量?

我想我的大多数问题都可以通过这个例子来回答:

如果我有一个空的FPU堆栈,并运行:

代码语言:javascript
复制
fld x
fld y
fmul st, st(1)

结果会是:

代码语言:javascript
复制
ST(0) = y * x
ST(1) = x

或者:

代码语言:javascript
复制
ST(0) = x * y
ST(1) = y

请注意,它们之间的差异是ST(1)中的值。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-21 01:28:29

这是从顶部开始的偏移量。加载将现有项进一步推送到堆栈中,top使它们移回更靠近顶部的位置。下面是你的小程序执行时的样子:

代码语言:javascript
复制
                   ST(0)      ST(1)
<start>            ---         ---
fld x               x          ---
fld y               y           x
fmul st(0), st(1)  y*x          x

This reference很好地解释了这一切。

票数 5
EN

Stack Overflow用户

发布于 2011-07-21 01:27:49

英特尔开发人员手册将是了解特定fpu指令如何工作(以及fpu本身是如何工作的)的最佳位置。在您的示例中,首先加载x,将其放在st(0),当您加载y时,st(0)被下推到st(1),y被放入st(0)。当你fmul时,st(0)变成y* x,st(1)保持x。它基本上是一个FILO堆栈(有环绕和其他一些特殊功能)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6765775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档