TP 3.01A: Есть ли встроенная функция или способ получить адрес метки?
Моя цель - получить 16-битный адрес метки в Turbo Pascal 3.01A. Я хочу использовать этот адрес внутри оператора встроенного ассемблера. Основная проблема заключается в том, чтобы получить адрес памяти этой метки.
Объявление метки выполняется зарезервированным словомlabel
:
LABEL lab;
Получение 16-битного адреса объявленной целочисленной переменной работает нормально:
VAR i,j:Integer;
BEGIN
i:=$2345;
j:=$6789;
WriteLn('$',Hex(HI(Addr(i))),Hex(LO(Addr(i))));
WriteLn('$',Hex(HI(Addr(j))),Hex(LO(Addr(j))));
(Hex()
это просто некоторая написанная мной функция, которая показывает вывод в шестнадцатеричном формате.) Вывод:
$C857 $C855
Но при выполнении того же на заявленной этикетке:
LABEL lab;
BEGIN
WriteLn('$',Hex(HI(Addr(lab))),Hex(LO(Addr(lab))));
lab:
exit;
END.
компилятор жалуется:
Ошибка 41: Неизвестный идентификатор или синтаксическая ошибка.
Я ожидал, что это произойдет. Я даже пытался поставитьlab:
надWriteLn
, но получил ту же ошибку.
Есть ли другой способ преодолеть эту проблему? Естественно ожидать, что для этого существует простое решение, поскольку смешивание встроенного ассемблера с обычным кодом было обычным явлением, когда была выпущена эта версия Turbo Pascal. Мне интересно, можно ли использовать указатель на метку или прочитать счетчик программ, чтобы получить адрес местоположения во время выполнения, но для такой простой вещи это кажется немного запутанным.