gpt4 book ai didi

c - fxch 的用法 - 汇编代码 - AT&T 语法

转载 作者:行者123 更新时间:2023-12-04 04:54:47 24 4
gpt4 key购买 nike

我想了解一些 assembly codeAT&T syntax .

这是一个片段:

"mov %eax, %ebx; "\
"mov %eax, %ecx;"\
"fxch %st(1);"\

这是我从中了解到的。

mov 复制(我正确吗?还是它移动了?)来自 source register 的数据到 destination register
在线 one:我们从注册表中复制数据 eaxebx .

同样,我们从注册表 eax 复制数据。至 ecx .

但是,我未能理解的是以下内容。
怎么样 fxch工作?这是一个 link这给出了一个例子。
   fxch    st(2)
fsqrt
fxch st(2)

它说上面的代码采用 sqrtst(2) .
如果我错了,请纠正我。
它交换了 top of the stackst(2)然后取 sqrt of what?我不是很清楚。

你能帮我一下吗?在我的情况和上述情况下,这如何工作?

最佳答案

mov指令确实复制了一个值和 fsqrt取栈顶的平方根并用其结果替换栈顶。所以给定的代码序列有效地取了 st(2) 的平方根并将其放回原处。

在下面回答您的问题。两人mov指令复制寄存器 %eax 中的值至 %ebx%ecx .因此,如果您添加另一个 mov %eax,%edx ,然后这个值(来自 %eax )也被复制到 %edx .

请注意,这适用于 AT&T 组装。在 Intel 汇编中,值以相反的方式复制。在那种情况下 %eax非常无用地反复更改以包含其他寄存器的值。
fxch st(1)交换栈顶,即 st(0)元素刚好低于顶部 st(1) .同样st(2)正下方st(1) .与整数寄存器相反,x86 上的浮点寄存器组织在堆栈中,减少了对这些浮点寄存器的操作的指令长度,因为它们总是在堆栈的顶部元素上工作。这伴随着必须使用 fxch 的开销。将正确的值放在堆栈顶部的指令。

整数寄存器 %eax , %ebx等不同于浮点堆栈/寄存器 st(0) , st(1)等等 所以mov说明与 fxch 无关说明。可以更改这些指令的顺序而不影响结果。

关于c - fxch 的用法 - 汇编代码 - AT&T 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16905358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com