【发布时间】:2014-08-10 06:07:37
【问题描述】:
我需要为长变量的原子增量获取指令编码。我正在考虑编写一些内联 gcc 程序集并使用 gdb 反汇编输出来获得答案。这就是我所做的。
#include <stdint.h>
int lock_inc(uint64_t *value) {
__asm__ __volatile__
(
"lock inc %0;\n"
:
: "r"(value)
: "memory"
);
}
uint64_t value = 0;
int main() {
lock_inc(&value);
}
但是当我尝试编译它时,我得到了以下错误。
lockinc.c:汇编程序消息:lockinc.c:5:错误:期望可锁定 `lock' 后的指令
我做错了什么?顺便说一句,如果有人知道直接答案(编码),那也很好。 (我指的是一些网站直接获取它,但不确定答案。感觉让 gcc 做会更容易。)
【问题讨论】:
-
您的使用说明书是怎么说的?我认为您不会在没有随时打开手册并准备好进行咨询的情况下进行此类工作。
-
中肯的建议。 :)。我想我是想找到简单的出路。
-
一个不需要 asm 的“怎么做”问题:stackoverflow.com/questions/2353371/how-to-do-an-atomic-increment-and-fetch-in-c
标签: gcc assembly x86-64 atomic inline-assembly