Technical Notes Database
TN365D.txt TASM 1.0 - RETURN FAILED FROM ASSEMBLY ROUTINE - T
Category :Pascal
Platform :All
Product :Turbo Pascal 4.0+
Description:
Q. When I call my Assembler routine from Turbo Pascal, everything
works OK. However, it does not seen to return properly.
Why?
A. Any routine declared in the main program or in the
implementation section of a unit, is by default a near call.
Your Assembly language routine, assembled to an .OBJ file, is
brought into the Pascal module as if it were declared and
defined in that module. Thus, by default, any call to that
Assembly language routine is a near call. If you have defined
your Assembly language routine as a proc far, the Assembler
will generate a corresponding RETF. Thus, a near call is
made, 4 bytes are popped off of the stack when the RETF is
executed, and control will be returned to the wrong code
segment. If you want that call to be a far call in your
Pascal module, be sure to bracket the function or procedure
declaration with {$F+} and {$F-}. Always make sure that the
distance declarations and definitions agree.
Reference:
7/16/98 4:35:31 PM
Last Modified: 01-SEP-99