Hello, all I don't know a better place to ask this, and beg your pardon for an off-topic post.
The Language Guide for Turbo Pascal 7.0 has this to say about `inline' statements and proceudres: When a normal procedure or function is called, the com- piler generates code that pushes the procedure's or function's parameters onto the stack and then generates a CALL instruction to call the procedure or function. When you call an inline procedure or function, the com- piler generates code from the inline directive instead of the CALL. Therefore, an inline procedure or function is expanded every time you refer to it, just like a macro in assembly language. [...] With inline directives, you can write procedures and functions that expand into a given sequence of machine code instructions whenever they are called. These are comparable to macros in assembly language. [...] Registers BP, SP, SS, and DS must be preserved by inline statements: all other registers can be modified. But which registers shall be preserved by inline proceudres and functions? In this example from the manual, the SP register is not preserved within the statement: function LongMul(X, Y: Integer): Longint; inline ( $5A/ {POP AX} $58/ {POP DX} $F7/$EA); {IMUL DX} Does it mean it shall reset SP to a position before the parameters? What about the other registers -- does Turbo Pascal take care of them, perhaps enveloping each expansion of an inline procedure into a POPs and PUSHes? -- Please, do not forward replies to my e-mail. _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal