[Back to RECORDS SWAG index] [Back to Main SWAG index] [Original]

    {
     To access record fields in Assembler you should define a Register to the
    ofset of the variable s or Record..
    Example:
    }
    Type MyRec = Record
           Hi :Byte;
           Lo :Word;
           S :String[90];
          End;
    Var
     Yup :MyRec;
    Begin
    asM
           Mov     DI, Seg Yup;
           Push    DI;     { Save it just incase folloing code uses DI }
           { do what evr code you wish }
           Pop     DI      { Get back our pointer }
           Mov     [DI+MyRec.Hi], AL;      { Lets say AL was the reg u want }
           Mov     [DI+RyRec.Lo], BX;
           { Ect }
    {       ....
    Remember, if you enter an assembler rountine that passes a Array of Records
    then you must Load AX with the size of Your Record, Take the Array Pointer
    Index Times The AX using the MUL instructions then SubTrace the Size of the
    Record from the AX which would be the Results fo the multiply and then add
    that to the DI for a Total Offset to the correct Record;
    Example:
     I want Record # 2
    }
    Procedure Test( AR:Array[1..4] of MyRec);
     Begin
      ASm
       Mov Di, Offset AR;
       Mov AX, TypeOF(MyRec);      { This generates the Size of the Record }
       MUL AX, 2;                  { I want to times it by 2 }
       SUB AX, TypeOf(MyRec);
       ADD DI,AX;
       { Now the DI pointers to the start of the #2 Record }
    { Of course this Record is on the stack in this example;
     Use a Globel methd or use the VAr in the Parms.
    it you use VAR then the Address must be gotten indirectly.
    Example:
    }  LES  DI, AR;         { THis Loads the Address fo the Array from the STactk
     { Then you go through you same multipy stuff }

[Back to RECORDS SWAG index] [Back to Main SWAG index] [Original]