繁体   English   中英

xchg如何在Intel汇编语言中工作

[英]How does xchg work in Intel Assembly Language

有人可以解释xchg在此代码中如何工作? 假设arrayD是1,2,3的DWORD数组。

mov eax, arrayD ; eax=1
xchg eax, [arrayD+4]; eax=2 arrayD=2,1,3

为什么xchg之后的数组1,1,3不存在?

xchg工作方式类似于Intel的文档所述

我认为第二行的评论是错误的。 它应该是eax=2arrayD = 1,1,3 因此,您是对的,除非您没有在笔记中遗漏某些东西,否则您应该给您的指导老师发送电子邮件,说您认为自己发现了一个错误。

xchg仅存储一个元素,并且无法神奇地回顾过去以了解eax的值来自何处,并用一条xchg指令交换两个内存位置。

在一条指令中将1,2交换为2,1的唯一方法是64位轮换,例如rol qword ptr [arrayD], 32 (仅x86-64)。


顺便说一句,如果您关心性能,请不要将xchg与内存操作数一起使用。 它具有隐式lock前缀,因此是一个完整的内存屏障,在Haswell / Skylake( http://agner.org/optimize/ )上大约需要20个CPU周期 当然,可以同时执行多个指令,但是xchg mem,reg为8 uops,相比之下,单独的load + store总共为2。 xchg不会使流水线停滞不前,但是内存障碍会给它带来很多伤害,并且使CPU原子化也需要大量工作。

有关:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM