[Back to MISC SWAG index] [Back to Main SWAG index] [Original]
{
> 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.
}
[Back to MISC SWAG index] [Back to Main SWAG index] [Original]