Коллеги, в порте AGG часто требуется заполнение кусков массива одним байтом.
В С это реализуется процедурой fill или аналогичными.
Для ББ это весьма опасное занятие, и, по-хорошему, надо бы переписывать это через настоящее обращение к массивам, через FOR или COPY.

Однако, есть уже работающий код, который использует процедуру Fill (точнее, SYSTEM.FILL(address, value, len) из XDS-runtime).

Поэтому, я написал процедуру на ассемблере, по аналогии с Kernel.Erase:

## Код:
```
PROCEDURE [ code ] agg_fill*(adr, words: INTEGER; val: INTEGER)
      089H, 0C7H,   (* MOV EDI, EAX *)
      031H, 0C0H,   (* XOR EAX, EAX *)
      059H,         (* POP ECX *)
      058H,         (* POP EAX *)
      0F3H, 0AAH;   (* REP STOSB *)
```


Процедура работает, но меня смущает то, что я вынужден был передать параметр val в виде четырехбайтного числа, потому как я не уверен, в каком виде передаются в стек параметры.

По задумке, правильный интерфейс процедуры такой:

## Код:
```
PROCEDURE [ code ] agg_fill*(adr, words: INTEGER; val: SHORTCHAR)
```


больше того, она в таком виде работает правильно.

Т.е. получается, что параметры процедуры (кроме первого) передаются через приведение к 32 битам и складыванию в стек.
Как это можно уточнить? В документации я это не нашел.