看雪论坛
发新帖

[求助]关于汇编中fld系列的指令和movss系列的指令的疑惑

kldxxlxc 2017-3-18 17:05 561

最近初学汇编,当观看到了关于浮点数运算的反汇编代码的时候,发现视频中的OD反汇编代码是这样的:

然后我自己也用相同的代码生成了一个可执行文件并用OD载入,到达相同的位置之后发现反汇编代码是这样的:

视频中老师讲的是关于fld之类的指令,通过影响FPU寄存器来实现浮点数的操作运算,但是到了我这里却成了movss之类的指令,我通过调试发现效果是一样的。 我的机器是win7 64位,然后项目使用VS2013编译出来的。


我想问的是那个fld系列的指令是已经被弃用了吗?为什么相同的代码生成的可执行文件却有不一样的指令?





第二次编辑:

刚才自己通过百度寻找关于movss系列指令的相关内容,发现了如下一段话,可以说解开了我的一部分疑惑:


SSE – Streaming SIMD Extension,是Intel从PIII开始加入的一种x86扩展指令集。在SSE以前,x86的浮点运算都是以栈式FPU完成的,有一定x86汇编经验的人应该不会对那些复杂的fld、fst指令陌生吧。而SSE一方面让浮点运算可以像整数运算的模式、如 add eax , ebx 那样通过直接访问寄存器完成,绕开了讨厌的栈,另一方面引入了SIMD这个概念。SIMD – Single Instruction Multiply Data,顾名思义,它可以同时让一条指令在多个数据上执行,这种体系结构在一度在大型机上非常流行,需要经常进行海量运算的大型机器通常会通过一个数学SIMD虚拟机加快处理速度,比如同时让一组数据执行一个变换,数据的规模有上百万之巨,而SIMD则可以优化数据的存储与运算,减免某些切换Context的开销。




本主题帖已收到 0 次赞赏,累计¥0.00
最新回复 (0)
返回



©2000-2017 看雪学院 | Based on Xiuno BBS | 域名 加速乐 保护 | SSL证书 又拍云 提供 | 微信公众号:ikanxue
Time: 0.011, SQL: 8 / 京ICP备10040895号-17