Q:  How do I use MOVE?

A:

unit Move1;

interface

uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls, wincrt;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
const
  MaxLargeArr = 256;
  MaxSmallArr = 128;
var
  OfsArr, ArrayDest, ArraySource: ^byte;
  i: integer;
begin

  { fill destination array with 0 1 2 3 4 5...}
  ArrayDest := AllocMem(MaxLargeArr);
  OfsArr := ArrayDest;
  for i := 0 to MaxLargeArr - 1 do begin
    OfsArr^ := i;
    inc(OfsArr);
  end;

  { fill source array with 127 126 125 124...}
  ArraySource := AllocMem(MaxSmallArr);
  OfsArr := ArraySource;
  for i := MaxSmallArr - 1 downto 0 do begin
    OfsArr^ := i;
    inc(OfsArr);
  end;

  { move destination array to the left 128 bytes }
  OfsArr := ArrayDest;
  inc(OfsArr, MaxSmallArr);
  move(OfsArr^, ArrayDest^, MaxLargeArr - MaxSmallArr);

  { append source array ( 128 bytes ) }
  inc(OfsArr, MaxLargeArr - (MaxSmallArr * 2));
  move(ArraySource^, OfsArr^, MaxSmallArr);

  { print destination array }
  OfsArr := ArrayDest;
  for i := 0 to MaxLargeArr - 1 do begin
    write(OfsArr^, '  ');
    inc(OfsArr);
  end;

  { free arrays }
  FreeMem(ArrayDest, MaxLargeArr);
  FreeMem(ArraySource, MaxSmallArr);
end;

end.