(C/C++) 内联汇编 "add dword ptr [address]" 递增地址而不是它的值

(C/C++) Inline Assembly "add dword ptr [address]" increments the address instead of it's value

我正在尝试使用内联汇编增加 DWORD iNumAddr 存储的地址处的值,我注意到它增加了地址而不是它包含的值.例如

->iNumAddr = 57D03390

->addstuff() 运行..

->iNumAddr = 57D033C2

地址是正确的,我已经测试过了

void addstuff()
{
    _asm {
        add dword ptr [iNumAddr], 50
    }
}

如果您在高级语言(如 C++)中声明变量 DWORD iNumAddr,则汇编语言代码中的符号 iNumAddr 将取 地址的值 的高级语言变量 iNumAddr。 (此地址通常由链接器分配。)

所以指令add dword ptr [iNumAddr], 50将增加变量iNumAddr,而不是iNumAddr指向的值。

执行您想要的操作需要两条指令。例如:

mov ebx,[iNumAddr]
add dword ptr [ebx],50