Установил Pascal ABC.net 
(версия 3.1, сборка 1179 от 29.02.2016)
Как пишет 
справка:
Передача статического массива в подпрограмму
При передаче статического массива в подпрограмму по значению также производится копирование содержимого массива - фактического параметра в массив - формальный параметр:
procedure p(a: Arr); // передавать статический массив по значению - плохо!
...
p(a1);
Это крайне расточительно, поэтому статические массивы рекомендуется передавать по ссылке. Если массив не меняется внутри подпрограммы, то его следует передавать как ссылку на константу (const), если меняется - как ссылку на переменную:
type Arr = array [2..10] of integer;
procedure Squares(var a: Arr);
begin
  for var i:= Low(a) to High(a) do
    a[i] := Sqr(a[i]);
end;
procedure PrintArray(const a: Arr);
begin
  for var i:= Low(a) to High(a) do
    Print(a[i])
end;
var a: Arr := (1,3,5,7,9,2,4,6,8); 
begin
  Squares(a);
  PrintArray(a);
end.
Для доступа к нижней и верхней границам размерности одномерного массива используются функции Low и High.
Вот рабочий код:
Program arrays;
type
  tArray = array [0..3] of integer;
var
  a, b: tArray;
  i: integer;
procedure FirstProcedure(a, b: tArray); 
begin
  writeLn(a);
end;
begin
  for i := Low(a) to High(a) do
    begin
      writeLn('WHAT IS A' + i + '?');
      readLn(a[i]);
    end;
    
  for i := Low(b) to High(b) do
    begin
      writeLn('WHAT IS B' + i + '?');
      readLn(b[i]);
    end;
  FirstProcedure(a,b);
end.