Subj : TP 7.0 pointer passing convension
To   : All
From : Anton Shepelev
Date : Sat Feb 15 2020 08:33 pm

Hello, all

The Language Guide for Turbo Pascal 7.0 says:

  Variable  parameters  (var parameters) are always
  passed by reference--a pointer that points to the
  actual storage location.
  [...]
  A  pointer-type  parameter is passed as two words
  (a double word).   The  segment  part  is  pushed
  before  the  offset  part so that the offset part
  ends up at the lowest address.

I have written the following proceudre that adds its
first argument to the second:

procedure AtoB(a: byte; var b: byte);
begin asm
  PUSH  AX           { store AX                 }
  MOV   DI,  [BP+4]  { store offset  of b in DI }
  MOV   ES,  [BP+2]  { store segment of b in ES }
  MOV   AX,  [BP+8]  { store a in AX            }
  MOV  [DI],  AX     { assign AX to a           }
  POP   AX           { restore AX               }
end end;

Does not it show that the TP documentation is in er-
ror, and pointers are put on stack backwards?

---
* Origin: nntps://fidonews.mine.nu - Lake Ylo - Finland (2:221/360.0)