С размещением интерффейсных программ между 32-разрядными и 16-разрядными процедурами разрешаются некоторые интерфейсные проблемы, такие как:
Возможность процедурам в 16-раззрядных сегментах вызывать процедуры в 32-разрядных сегментах, имеющие смещение большее 0FFFFH.
Устанавление соответствия между размерами операндов команд CALL и RET .
Перевод параметров (данных).
Интерфейссная программа упрощается, когда есть нижеследующие ограничения.
Интерфейсная программа располагается в сегменте с установленным D-битом, означающим размер операнда по умолчанию 32 бита.
Все процедуры, которые могут вызываться 16-разрядными процедурами, имеют смещение не более 0FFFFH.
Все возвращаемые адреса, сохраняемые 16-разрядными процедурами, также имеют смещение не более 0FFFFH.
Если какое либо из этих ограничений нарушается, то программа интерфейса становится более сложной. Например, если 16-разрядная процедура вызывает 32-разрядную процедуру с точкой входа за 0FFFFH, программа интерфейса должна обеспечить смещение к точке входа. Отображение между 16-разрядными и 32-разрядными адресами осуществляется автоматически только при использовании шлюза вызова, поскольку дескриптор шлюза вызова содержит 32-разрядный адрес. Если шлюз вызова не используется, то 32-разрядный адрес должен обеспечить дескриптор.
Программа интерфейса вызывает процедуры из других сегментов. Возможно два типа интерфейсов:
Когда 16-разрядные процедуры вызывают 32-разрядные процедуры. Процедура интерфейса вызывается 16-разрядной командой CALL и использует префикс размера операнда перед командой RET для выполнения 16-разрядной команды RET. Вызовы 32-разрядных сегментов - это 32-разрядные команды CALL (по умолчанию, поскольку установлен D-бит), а 32-разрядная программа производит возврат с помощью 32-разрядной команды RET.
Когда 32-разрядные процедуры вызывают 16-разрядные процедуры. Процедура интерфейса вызывается 32-разрядной командой CALL и возвращается 32-разрядной командой RET (по умолчанию, поскольку установлен D-бит). Команда CALL для 16-разрядных процедур использует префикс размера операнда; возврат 16-разрядной процедуры осуществляется с помощью 16-разрядной команды RET.