社区
非技术类
帖子详情
请教一个初级问题,大家别不好意思回答哦
hugeant
2002-03-11 12:50:18
我在一端Delphi的内镶汇编代码中看到下面的语句,估计和协处理器相关,不知道什么意
思,谁能给逐句解释一下:
FMULP ST(1), ST
FDIVP ST(1), ST
FADDP ST(1), ST
FSUBP ST(1), ST
BTW : 谁能给一份协处理器操作的汇编的指令介绍??
...全文
105
5
打赏
收藏
请教一个初级问题,大家别不好意思回答哦
我在一端Delphi的内镶汇编代码中看到下面的语句,估计和协处理器相关,不知道什么意 思,谁能给逐句解释一下: FMULP ST(1), ST FDIVP ST(1), ST FADDP ST(1), ST FSUBP ST(1), ST BTW : 谁能给一份协处理器操作的汇编的指令介绍??
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yayv
2002-03-15
打赏
举报
回复
//eval:begin
add esp,FFFFFFF8 ;调整堆栈指针 esp <- esp - 8,确保栈顶为参数
// b:=a*b+c*d
fld qword ptr[004407E8]
;装入64位实数,实际是先转换为80位实数再压入栈
fmul qword ptr[004407F0]
;实数乘,ST(1)*ST(0),两操作数弹出,结果压入栈顶
fld qword ptr[004407F8]
;装入64位实数,实际是先转换为80位实数再压入栈
fmul qword ptr[00440800]
;同上
faddp st(1),st
;两操作数出栈,相加,结果压入栈
fstp qword ptr[004407F0]
;栈顶元素弹出并存入qword ptr[004407F0],栈顶弹出按照80位实数弹出,转换後存入
wait
;等待协处理器完成指令
//然后下面接着就是前面给出的代码
fmulp st(1),st
;指令结尾有p的都是先弹出后运算,再入栈
fdivp st(1),st
faddp st(1),st
fsubp st(1),st
//result:=a+b
fld qword ptr[004407E8]
;这里不用再解释了吧
fadd qword ptr[004407F0]
;:-)
fstp qword ptr[esp]
;都一样的
wait
;也说过了
fld qword ptr[esp]
;自己看看也会明白的
pop ecx
pop edx
ret
;到这里就结束了
btw:其实我算不上什么大虾,我也刚开始学ASM
SuperYayv
2002-03-14
打赏
举报
回复
80387指令都用栈顶作为操作数,其中ST指栈顶,ST(i)指从栈顶第n个栈元素。ST=ST(0)
natureshuo
2002-03-11
打赏
举报
回复
g z
hugeant
2002-03-11
打赏
举报
回复
谢谢SuperYayv(蠹书虫) ,
该段程序的出处原始代码为:
a,b,c,d是4个全局Double变量
function Eval:Double
begin
b := a*b+c*d;
asm
FMULP ST(1), ST
FDIVP ST(1), ST
FADDP ST(1), ST
FSUBP ST(1), ST
end;
Result := a+b;
end;
我还有一些不明白的地方,请指点:
ST是什么?? 寄存器吗? ST(1) 和 ST有什么不一样??
ST如果是寄存器,那里面的数据是哪里来的?
如何给出操作数? 上面的代码中算给出了吗??
我用Turbo Debugger 看了一下上面的Eval函数代码用Delphi编译后生成的汇编代
码如下:
//eval:begin
add esp,FFFFFFF8
// b:=a*b+c*d
fld qword ptr[004407E8]
fmul qword ptr[004407F0]
fld qword ptr[004407F8]
fmul qword ptr[00440800]
faddp st(1),st
fstp qword ptr[004407F0]
wait
//然后下面接着就是前面给出的代码
fmulp st(1),st
fdivp st(1),st
faddp st(1),st
fsubp st(1),st
//result:=a+b
fld qword ptr[004407E8]
fadd qword ptr[004407F0]
fstp qword ptr[esp]
wait
fld qword ptr[esp]
pop ecx
pop edx
ret
能帮我逐句注释一下吗? 我在汇编方面是菜鸟,几年没接触了,当初对于浮点操作的
也没学过,麻烦你了,SuperYayv(蠹书虫) 大侠 :)
SuperYayv
2002-03-11
打赏
举报
回复
;以上指令都是80387的浮点指令
FADDP ST(1),ST;为浮点操作数相加,如果不规定操作数,则隐指ST(1)+ST,结果放入栈顶,若指给出一个操作数op1,则隐指ST+op1,结果放入栈顶。若给出了两个操作数,便执行op1+op2,结果放入op1(ST或ST(n)).如果op1为内存操作数(字整数或短整数,短实数或长实数),在它参与任何操作之前,自动转换成内部的临时实型数格式。无任何操作数的FADD,FADDP可令栈顶弹出。所以,无操作数的FADD,与FADDP ST(1),ST同义。
相关指令:
FADD
FADD op1
FIADD op1
FADDP op1,op2
FADD op1,op2
其它指令类似。
btw:我这里有一份8086-80486的指令集,但没有类似上述指令的浮点指令。
如果要的话留下email
前端实习生需要到达什么水平?
想学习web前端,并且能拿到不错的offer,那么你得找到好的学习方法 前端最让人误解的就是入门简直不要太简单了!基本上每天花一些时间学习,
一个
多月的时间,就能开始学会做网页,做动效,但是要是想真正用到工作中,要学的东西太多太多了!目前市场来说,
初级
前端工程师并不是很值钱,要想达到上万的薪资,真,真,真的是不是做做网页就行了 第一呢:大家得明白学习前端,基础的重要性 无论做什么都一定要有扎实的基础,只有基础牢固,才能更深入的学习新技能。作为一名
初级
的web前端工程师,你必须要具备基础的技术要素:html,C
坚持练字一年是什么样的体验?
黄金体验 ,金融 221 人赞同 实名反对那个林安的
回答
。无用也就罢了,还极度误人。长篇大论,或许只是为了一己私利。 如果有心练字,你会发现,无论你去报任何书法培训班、
请教
任何当代书法家或研读任一位古今书法大师的平生经历,都有
一个
共同点,一切书法入门都是从古贴开始。二王张怀、颜柳欧赵、苏黄米蔡等书法大家,他们代表着中国书法的最高水平,后人无一不是从学习他们开始,而千百年来,又鲜有
面试问答汇总
面试问答汇总 目 录 一、你最大的优点是什么?(
回答
技巧及范例) 二、 “你有什么
问题
要问我的吗?” 向面试官提问 三、自我介绍 四、你为什么会选择你目前学习的专业呢? 五、你有过和别人合作的经历吗? 六、说说您的缺点,好吗? 七、在人际沟通上是否曾经有过不和谐? 八、能说一说你未来的职业生涯规划吗? 九、在被问到家庭情况的时候,应该怎么
回答
? 十、多个
问题
同时出现时,...
一个
老兵的linux学习和面试经验分享
特别说明:本文为约9个月前老男孩linux培训内部师兄给师弟的经验分享,经过该同学同意,特此分享给所有博友。学习和面试经验分享大家好,非常高兴能在这里给大家分享学习和面试的经验,同时也非常感谢老男孩老师给我这次机会。我的网名“八一杠一”,我的博客xxxx。我是老男孩老师linux运维就业课程第11期,高级架构课程9期,python课程第一期的学生。我2012年2月来的北京,6...
大四计算机未来迷茫,【答粉丝问】送给大四迷茫的人
图:豌杂面说明:图文无关,只是写这篇东西的时候突然有点饿。粉丝提问:一大早七点多钟就开始提问的人,一定是个勤快的人,所以,我也会很认真地
回答
。一、成为NC的财务模块实施顾问难吗?不难,但是要成为
一个
好的实施顾问很难。二、这个职业会不会更偏向于IT而不是财务?这个职业属于综合素质要求比较多的职业,
初级
的时候才会偏向于技术(IT技术和财务技能),高级的时候就会偏向于管理,包括项目管理、业务管理、IT管...
非技术类
1,649
社区成员
58,980
社区内容
发帖
与我相关
我的任务
非技术类
VC/MFC 非技术类
复制链接
扫一扫
分享
社区描述
VC/MFC 非技术类
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章