Contributor: HELGE HELGESEN           

{
> If I make a Assembly routine in a Turbo Pascal program,
> how can I make far jumps, calls, etc?

Here's two procedures:
}

procedure CallFar(Where : pointer); assembler;
asm
  call Where
end;

procedure JmpFar(Where : pointer); inline($cb);

{
> How can I make labels?
You can make local labels.
}

asm
  jcxz @1
  shl  ax, cl
 @1:
  add  cx, bx
  ...
end;
{
But with assembly in Pascal you can also make local variables;
}

procedure Test; assembler;
var
  MyLocalVar : word; { a variable }
asm
   mov MyLocalVar, 0 { clear contents }
end;

{
> how to discover the offset of a certain instruction?

To discover the offset for a variable, you might use LEA
(Load Effective Address).
}
   LEA  bx, MyLocalVar { for the above example }
{
Will NOT return the contents of MyLocalVar, but the offset
within the stack segment to MyLocalVar.
}