【发布时间】:2020-06-04 01:34:26
【问题描述】:
我有这段代码,我们有距离 (D) 和角度 (A),函数必须返回 X, x=cosine(a)*d and Y, y=sine(a)*d
.data
n180 word 180
d word 60
a word 10
x word 0
y word 0
.code
fild word ptr a
fild word ptr n180
fdiv
fldpi
fmul
fsincos
fild word ptr d
fmul
fistp word ptr x
fwait
fxch
fild word ptr d
fmul
fistp word ptr y
第一次运行程序(使用 a=10 和 d=60)我得到 X=59 e Y=-32768
这里 X 是对的,我在使用 FXCH 之前得到它,但 Y 是错误的。如果我再次运行程序然后我得到 X=59 和 Y=10
现在好了
为什么我第一次运行时收到FXCH 的错误?
【问题讨论】:
-
@KenWhite 我已经输入了英文
-
我已经尝试过首先使用 FINIT 和 FCLEX...但没有结果...我在第二次运行程序时得到了答案
-
fistp word ptr x弹出堆栈...你希望fxch做什么? -
@ChrisHall 我删除了 FXCH,它起作用了。拳头弹出ST(0),对吗?我需要正弦和余弦,我忘记了 fmul 和 fdiv 它也弹出...所以我使用 FXCH 来获取正弦和余弦,但是 FMUL 是如何弹出的,我不需要
-
我很高兴听到它现在可以工作了 :-) 是的,
ST(0)是当前的栈顶,所以fistp会弹出它。是的,无操作数FADD、FDIV、FDIVR、FMUL、FSUB和FSUBR都弹出右手参数ST(0)。我还注意到FADD和FADDP(没有操作数)都只是FADDP ST(1), ST(0)(Intel 排序)的简写,这不与FADD ST(1), ST(0)相同。我还注意到,英特尔手册更喜欢FADDP等无操作数形式的助记符。
标签: windows assembly x86 fpu x87