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

从Git下载的AsmProfiler编译报错:E2112无效寄存器组合

解决Delphi编译AsmProfiler时的E2112错误

你遇到的E2112 Invalid register combination错误,是因为dcc32编译器不允许直接将esp寄存器的值写入内存操作数,这属于x86汇编的操作数组合限制。

修改第470行的代码,通过通用寄存器中转esp的值即可解决:

function GetCurrentContext: temp;
// Those three registers are enough.
asm
//@Label:
  mov [result.Ebp], ebx
  // 替换原单行mov指令为以下两行
  mov eax, esp
  mov [result.Esp], eax
  //mov ax, @@Label
  //call get_eip
  mov [result.Eip], eax;
end;

原理很简单:x86架构中,直接将栈指针寄存器esp的值写入内存的操作组合不被编译器允许,先把esp的值暂存到eax这类通用寄存器,再写入目标内存位置,就能绕过这个限制,让编译正常通过。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 21:19:53