我正在尝试使用内联汇编实现b = ++a;
的等效功能,但是执行代码后,变量中的值变得奇怪。我正在使用clang ++(与g ++兼容)来编译内联汇编。这是到目前为止我得到的:
#include <iostream>
using std::endl;
using std::cout;
int main()
{
uint64_t a = 0;
uint64_t b = 0;
asm volatile(
"pushq %%rbp;"
"movq %%rsp,%%rbp;"
"movl $0,-4(%%rbp);"
"movl $0,-8(%%rbp);"
"addq $1,-4(%%rbp);"
"mov -4(%%rbp),%%rax;"
"mov %%rax,-8(%%rbp);"
"mov -4(%%rbp),%0;"
"mov -8(%%rbp),%1;"
"movq %%rbp,%%rsp;"
"popq %%rbp"
:"=r" (a),"=r" (b)
:
:"%rax","%rbp","%rsp"
);
cout << "a = " << a << ",b = " << b << endl;
return 0;
}