Wbudowany asembler Borland x86; uzyskać adres etykiety?
Używam Borland Turbo C ++ z pewnym kodem assemblera, więc przypuszczalnie Turbo Assembler (TASM) kod zespołu stylu. Chcę wykonać następujące czynności:
void foo::bar( void )
{
__asm
{
mov eax, SomeLabel
// ...
}
// ...
SomeLabel:
// ...
}
Więc adres SomeLabel jest umieszczany w EAX. To nie działa i kompilator skarży się na: Niezdefiniowany symbol „SomeLabel”.
W Microsoft Assembler (MASM) symbol dolara ($) służy jako aktualny licznik lokalizacji, który byłby użyteczny dla mojego celu. Ale to znowu nie działa w Borlands Assember (błąd składni wyrażenia).
Aktualizacja: Aby być trochę bardziej szczegółowym, potrzebuję kompilatora do wygenerowania adresu, który zmienia się w eax jako stałą podczas kompilacji / łączenia, a nie w czasie wykonywania, więc będzie kompilowany jak „mov eax, 0x00401234”.
Czy ktoś może zasugerować, jak to działa?
AKTUALIZACJA: Aby odpowiedzieć na pytanie Paxa (patrz komentarz), Jeśli adres bazowy zostanie zmieniony w czasie wykonywania przez program ładujący Windows, obraz PE DLL / EXE będzie nadal przenoszony przez program ładujący Windows, a adres etykiety zostanie poprawiony w czasie wykonywania przez program ładujący użyje adresu ponownego użycia, więc użycie wartości czasu kompilacji / linku dla adresu etykiety nie stanowi problemu.
Z góry bardzo dziękuję.