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

     {Fast FillChar and Move}
     {Posted By: Wesley Burns}
     {Email    : microcon@iafirca.com}
    Unit MEM;

    Interface
    Procedure FillCharFast(Var X; Count: Word; Value:Byte);
    Procedure MoveFast(var source, dest; count: word);

    Implementation
    Procedure MoveFast(var source, dest; count: word); Assembler;
    asm
      push ds
      lds  si,source      {ds,si = source}
      les  di,dest        {es,di = dest}
      mov  cx,count       {cx = count}
      mov  ax,cx          {ax = count}
      cld
      shr  cx,2           {cx = count / 4}
      db   66h
      rep  movsw          {copy double words}
      mov  cl,al          {get rest bytes}
      and  cl,3
      rep  movsb          {copy rest}
      pop  ds
    end;

    Procedure FillCharFast(Var X; Count: Word; Value:Byte); Assembler;
    Asm
      les di,x
      mov cx,Count
      shr cx,1
      mov al,value
      mov ah,al
      rep StoSW
      test count,1
      jz @end
      StoSB
    @end:
    end;

    end.

     {Email: me if you have ANY questions about                                   }
     { : 64k DMA Sound Blaster Programming using XMS                              }
     { : Fast Memory Management                                                   }
     { : PCX using XMS                                                            }
     { : XMS Units                                                                }
     { : Pascal in general                                                        }
     { : Or if you have some fast procedures that you don't mind parting with.    }

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