-
-
[求助]关于汇编中fld系列的指令和movss系列的指令的疑惑
-
发表于:
2017-3-18 17:05
17753
-
[求助]关于汇编中fld系列的指令和movss系列的指令的疑惑
最近初学汇编,当观看到了关于浮点数运算的反汇编代码的时候,发现视频中的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的开销。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课