使用C++中的内联汇编更改数值

Imr*_*ado 5 c++ inline-assembly

我试图通过在C++中使用内联汇编来增加数值.我这样做的原因是练习我的"内联汇编"技能.

那就是我到目前为止所做的事情:

void main()
{
    int x;
    cout << "Please enter a number ";
    cin >> x;
    cout << "The number you entered is: " << x << "\n";
    foo(&x);
    cout << "The new number is: " << x;
    cin >> x;
}

void foo(int *x) 
{
    __asm
    {
        inc [x]
    };
}
Run Code Online (Sandbox Code Playgroud)

价值从未改变.

Ane*_*eri 7

x实际上,你正在递增值.X就汇编语言而言,是一个包含x变量(函数foo)地址的常量.反过来,它包含了mains 的地址x.因此,inc [x]导致指针的增量.您需要增加存储在地址中的值[x],例如inc [[x]].当然,因为你需要,你不能做到这一点,在汇编语言一个指令2知道:内存访问其中的值存储和实际增加值.所以我建议像这样的代码:

push eax
mov eax, [x]
inc dword ptr [eax]
pop eax
Run Code Online (Sandbox Code Playgroud)