Borland x86内联汇编程序; 得到标签的地址?

QAZ*_*QAZ 8 c++ x86 assembly turbo-c++

我正在使用Borland Turbo C++和一些内联汇编程序代码,因此可能是Turbo Assembler(TASM)样式汇编代码.我希望做到以下几点:

void foo::bar( void )
{
    __asm
    {
      mov eax, SomeLabel
      // ...
    }
    // ...
SomeLabel:
    // ...
}
Run Code Online (Sandbox Code Playgroud)

所以SomeLabel的地址放在了EAX中.这不起作用,编译器抱怨:未定义的符号'SomeLabel'.

在Microsoft Assembler(MASM)中,美元符号($)用作当前位置计数器,这对我的目的很有用.但是,这似乎在Borlands Assember中没有用(表达式语法错误).

更新:为了更具体一点,我需要编译器在编译/链接期间生成作为常量移动到eax的地址,而不是在运行时,因此它将编译为"mov eax,0x00401234".

任何人都可以建议如何使这个工作?

更新:要响应Pax的问题​​(请参阅注释),如果Windows加载程序在运行时更改了基址,则Windows加载程序仍将重定位DLL/EXE PE映像,并且标记地址将在运行时通过以下方式修补:加载器使用基于重新的地址,因此使用标签地址的编译/链接时间值不是问题.

提前谢谢了.

Ada*_*itz 5

上次我尝试使一些汇编代码与 Borland 兼容时,我遇到了不能前向引用标签的限制。不确定这是否是您在这里遇到的情况。