Странная функция P/0P
May. 11th, 2019 10:19 pmС некоторого момента третья часть паскалевского теста стала компилироваться, но при загрузке возникала ошибка:
Вызов происходил в виде:
P/01 - ширина элемента 1 бит ;
P/02 - 2 бита;
P/03 - 3 бита;
P/04 - 4 бита;
P/06 - 6 бит;
P/08 - 8 бит;
P/0П - 12 бит;
P/00 - 16 бит;
P/07 - 24 бита.
Недавно я сделал правку в компиляторе, чтобы разрешить процедурам pack() и unpack() работать с неупакованными массивами. Как следствие, компилятор делает попытку вызывать P/STAR для "упакованных" массивов с элементами размером 48 бит. Имя процедуры при этом получается P/0P, а её такой нету. Надо чинить это место.
ОТСУТСТВУЕТ Р/0Р
Разобрался, откуда бралась странная функция Р/0Р. Вкратце: некорректно формировалось имя функции. Вызов происходил в виде:
14,VTM,P/1D+248 11,VTM,P/0P 13,VJM,P/STARЗдесь P/STAR - обобщёная процедура записи элемента в упакованный массив. В зависимости от размера элемента упакованного массива задействуется вспомогательная процедура, адрес которой передаётся в регистре 11. Имена процедур:
P/01 - ширина элемента 1 бит ;
P/02 - 2 бита;
P/03 - 3 бита;
P/04 - 4 бита;
P/06 - 6 бит;
P/08 - 8 бит;
P/0П - 12 бит;
P/00 - 16 бит;
P/07 - 24 бита.
Недавно я сделал правку в компиляторе, чтобы разрешить процедурам pack() и unpack() работать с неупакованными массивами. Как следствие, компилятор делает попытку вызывать P/STAR для "упакованных" массивов с элементами размером 48 бит. Имя процедуры при этом получается P/0P, а её такой нету. Надо чинить это место.