作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想了解一些 assembly code
与 AT&T syntax
.
这是一个片段:
"mov %eax, %ebx; "\
"mov %eax, %ecx;"\
"fxch %st(1);"\
mov
复制(我正确吗?还是它移动了?)来自
source register
的数据到
destination register
one:
我们从注册表中复制数据
eax
至
ebx
.
eax
复制数据。至
ecx
.
fxch
工作?这是一个
link这给出了一个例子。
fxch st(2)
fsqrt
fxch st(2)
sqrt
的
st(2)
.
top of the stack
与
st(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/
我想了解一些 assembly code与 AT&T syntax . 这是一个片段: "mov %eax, %ebx; "\ "mov %eax, %ecx;"\ "fxch %st(1);"\ 这
我是一名优秀的程序员,十分优秀!