AT&T x86 | `xadd %eax, (%ecx)` 有啥作用?
Posted
技术标签:
【中文标题】AT&T x86 | `xadd %eax, (%ecx)` 有啥作用?【英文标题】:AT&T x86 | What does `xadd %eax, (%ecx)` do?AT&T x86 | `xadd %eax, (%ecx)` 有什么作用? 【发布时间】:2019-01-06 21:46:38 【问题描述】:它是否交换 %eax
和 value stored at address%ecxx
并将总和存储在 address%ecx
中?
【问题讨论】:
【参考方案1】:指令XADD
...
...将第一个操作数(目标操作数)与第二个操作数(源操作数)交换,然后将两个值的总和加载到目标操作数中。
所以,根据它的操作,它执行如下微码:
TEMP ← SRC + DEST;
SRC ← DEST;
DEST ← TEMP;
在你的情况下,这意味着xadd %eax, (%ecx)
EAX
的值加上ECX
指向的地址处的值
将ECX
指向的地址的值移动到EAX
将TEMP变量移动到ECX
指向的地址
该指令可以与LOCK
前缀组合,因此可以原子地执行。
【讨论】:
以上是关于AT&T x86 | `xadd %eax, (%ecx)` 有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章
AT&T 语法中的 3 或 4 参数 x86 程序集[重复]
将 ISR 链接到向量中断 80x86 32 位 AT&T 程序集