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

最佳答案

有多种方法可以做到这一点。最可移植和推荐的方法是使用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));

08-16 02:23