Intel x86组件用于比较和重置内存

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Intel x86组件用于比较和重置内存相关的知识,希望对你有一定的参考价值。

在Intel x86处理器上,是否可以在特定内存位置比较一个值与另一个值,如果比较成功则重置内存而不必担心多线程/处理器问题?我看到CMPXCHG指令 - 会有用吗?或者有比较和设置用例的东西?

答案

CMPXCHG指令将隐含寄存器(EAX)中的值与目标进行比较,并更新零标志(EFLAGS.ZF)以指示目标中的值是否与EAX中给出的值匹配,在这种情况下,源操作数中的值(显式寄存器)存储在目标中。 CMPXCHG还使用从目标读取的值更新EAX。

维基百科将compare-and-set描述为compare-and-swap的变体,您可以在其中获得内存位置的数据是否与给定值匹配的真/假指示,从而更新内存位置。 compare-and-swap替代方法返回从内存中读取的内容,您可以自己与给定值进行比较。

http://en.wikipedia.org/wiki/Compare-and-set

...重定向到

http://en.wikipedia.org/wiki/Compare-and-swap

在这个意义上,CMPXCHG既是compare-and-set又是compare-and-swap.

您必须使用LOCK前缀来确保CMPXCHG以原子方式执行,也就是说,执行CMPXCHG的线程会在任何其他线程访问它之前读取然后写入内存位置。

你说resetting the memory if the compare succeeded如果你的意思是将内存位置设置为零,那么零是源寄存器中你想要的值。

对于做compare-and-swap的便携方式,请参阅this SO question中的资源

注意CMPXCHG指令允许目标操作数是寄存器以及存储器位置。测试8个字节时,您将使用CMPXCHG8B指令。当您在CMPXCHG8B指令上指定LOCK前缀并指定寄存器作为目标时,Pentium处理器中存在错误,您可以阅读更多相关信息here

以上是关于Intel x86组件用于比较和重置内存的主要内容,如果未能解决你的问题,请参考以下文章

cmp 不工作 - Intel x86 (IA32) 程序集

如何配置 Trigger.IO 以将 Intel Atom x86 目标用于我的 Android 虚拟设备?

markdown 在Intel Nuc上设置Ubuntu Web服务器,步骤和代码片段

我可以将 x86 程序集的 Intel 语法与 GCC 一起使用吗?

win10网络重置代码56

Intel X86 CPU寻址方式