###

    		Написание процедур и примитивов на языке ассемблера

    1. Инка libmacro

      В инке содержаться три основных макроса для создания примитивов на
    языке ассемблера:
    	BEGLIB
    	ITEM
    	ENDLIB

    1.1. BEGLIB
      Макро создает заголовок библиотеки.

    1.2. ENDLIB
      Макро закрывает библиотеку

    1.3. ITEM
      Основное макро. Имеет четыре параметра. Три последних не обязательны.
    Вызывается в формате
    	ITEM 'name_of_prog', FLAG, PR, LOC
      Где 'name_of_prog' - строка, содержащая имя процедуры, FLAG - флажок,
    PR - приоритет процедуры, LOC - число байт, требуемое для локальных
    параметров процедуры (по умолчанию 0 байт).

    2. Соглашения д2

    2.1. Стеки.

      д2 представляет собой двухстековую машину: стек возвратов и арифметический
    стек. Арифметический стек адресуется по SS:SP с верхушкой в регистре AX.
      т.е. загрузка параметра в стек происходит следующим образом

    	push	ax
    	mov	ax, value

      стек возвратов адресуется по DS:BP, он содержит адрес возврата и
    локальные параметры процедуры.

    	bp+2+L1+L2	...
    	bp+2+L1	-->	второй параметр (длиной L2)
    	bp+2	-->	первый параметр (длиной L1)
    	bp	-->	адрес возврата

    3. Пример написания библиотеки

    ;--- cut here

    	include libmacro.inc

    	beglib

    	item	'writestr',0,0,0
    		mov	dh, 9
    		xchg	ax, dx
    		int	21h
    		pop	ax

    	item	'halt'
    		mov	ax, 4C00h
    		int	21h

    	endlib

    ;--- cut here

    4. Формат 1.0. библиотеки д2

    	ofs	size	item_description
    	---	----	----------------
    	0	5	'lib2d' - сигнатура
    	5	2	смещение первой словарной статьи
    	...	...	далее идут словарные статьи

       Формат словарной статьи

    	ofs	size	item_description
    	---	----	----------------
    	0	2	cсылка на следующую статью или ноль
    	2	1	флажок
    	3	1	приоритет статьи
    	4	1	размер необходимый под локальные параметры
    	5	?	имя статьи в формате строки с завершающим нулем
    	?	?	машинный код