You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C/C++内联汇编add dword ptr [iNumAddr]错误递增地址而非对应值

问题原因

你当前编写的汇编代码add dword ptr [iNumAddr], 50实际是对iNumAddr变量本身所在的内存地址执行加法操作,所以修改的是iNumAddr存储的地址值,而非该地址指向的内容。你观测到的数值变化刚好符合这个逻辑:十进制50转换为十六进制为0x32,0x57D03390 + 0x32 = 0x57D033C2,和你的执行结果完全匹配。

修复代码

要实现对iNumAddr存储的地址指向的内容做递增,需要先把iNumAddr存的地址值读到寄存器,再对寄存器指向的内存做加法:

void addstuff()
{
    _asm {
        mov eax, [iNumAddr]      // 将iNumAddr变量存储的目标地址读到eax寄存器
        add dword ptr [eax], 50  // 对eax寄存器存储的地址指向的内存执行加50操作
    }
}
注意事项
  • 确保iNumAddr存储的地址是合法可写的内存地址,否则会触发访问违规异常
  • 以上写法仅适配MSVC的内联汇编语法,gcc、clang等编译器的内联汇编规则不同,不可直接套用

内容的提问来源于stack exchange,提问作者DrSTAHP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 20:57:03