用AsmJit引用全局变量

时间:2014-01-27 03:56:53

标签: c++ assembly inline-assembly asmjit

我需要将现有全局变量/ exernal变量的地址加载到具有lea操作的寄存器中。这可能在AsmJit?相关的ptr函数似乎只接受需要在AsmJit中创建的GpVar。

1 个答案:

答案 0 :(得分:1)

有多种方法可以做到这一点。最便携和推荐的方法是使用 mov reg,imm

using namespace asmjit;
using namespace asmjit::host;

// You have to initialize these...
Compiler c;

GpVar var(c, kVarTypeIntPtr);

void* p = NULL;
c.mov(var, imm_ptr(p));

或者 lea reg,mem 具有绝对地址[mem]形式。此解决方案仅在32位模式下正常工作;绝对地址大小始终被截断为32位:

c.lea(var, ptr_abs(p));