Assembly 什么';苏格兰和南方能源公司是否等同于fstp?

Assembly 什么';苏格兰和南方能源公司是否等同于fstp?,assembly,x86,sse,fpu,x87,Assembly,X86,Sse,Fpu,X87,如果我弄错了,请纠正我,但是fstp会从FPU堆栈的顶部弹出值,例如st0 i、 e。 fstptword[rsp] 如果在SSE寄存器xmm0中有值,那么等价物是什么?我想打印存储在寄存器中的值。SSE不使用堆栈,它的寄存器可以直接访问。如果要显示MMX或SSE寄存器的内容,则“store”指令是合适的。它会将值复制到程序内存中的原始数据类型数组中(尽管在许多情况下,您可以简单地用高级语言强制转换SSE变量,但通过强制寄存器溢出到内存,获取其地址可能会干扰优化。首选使用加载和存储内部函数。)

如果我弄错了,请纠正我,但是fstp会从FPU堆栈的顶部弹出值,例如st0

i、 e。 fstptword[rsp]


如果在SSE寄存器xmm0中有值,那么等价物是什么?我想打印存储在寄存器中的值。

SSE不使用堆栈,它的寄存器可以直接访问。如果要显示MMX或SSE寄存器的内容,则“store”指令是合适的。它会将值复制到程序内存中的原始数据类型数组中(尽管在许多情况下,您可以简单地用高级语言强制转换SSE变量,但通过强制寄存器溢出到内存,获取其地址可能会干扰优化。首选使用加载和存储内部函数。)

例如

MOVUPD


说明。

Hmm。。你能举一个从SSE寄存器输出值的例子吗?用谷歌搜索“MOVUPS示例”真的太难了吗?这里有一个看起来相当完整:它需要将值存储在一个全局文件中。无法从rax打印f吗?@user1787038:该示例使用了一个全局地址,但您也可以轻松地使用相对于堆栈指针的地址。RAX是一个整数寄存器,您不会将SIMD引擎中的浮点值放入其中。如果要从汇编代码中
printf()
,则浮点参数位于
%xmm0
之后(至少对于第1…第6个浮点参数)。你不需要把他们调出去。
MOVUPS