При входе в подпрограмму регистр ds содержит сегмент оперативной памяти, в котором расположен драйвер. Поэтому выполнение подпрограммы должно начинаться с записи в регистр ds значения сегмента данных задачи. Кроме того, драйвер использует регистр es для доступа к области данных BIOS, поэтому при входе в подпрограмму он может оказаться очищенным. Если подпрограмма использует регистр es при обращениях к видеопамяти, то в него надо записать код сегмента видеобуфера. Перед возвратом из подпрограммы в драйвер восстанавливать исходные значения регистров ds и es не требуется.
При разработке подпрограммы вы можете использовать регистры общего назначения по своему усмотрению, не заботясь о сохранении их исходных значений. После возврата в драйвер он восстановит содержимое тех регистров, которые нужны для продолжения работы.
Последней выполняемой командой подпрограммы должна быть retf. Если подпрограмма использует стек для своих нужд, то к моменту выполнения retf должно быть восстановлено исходное (на момент входа в подпрограмму) состояние стека. Последнее слово стека содержит сегмент оперативной памяти, в котором расположен драйвер, а предпоследнее — адрес возврата, относящийся к этому сегменту.
Замечание 1
Замечание 1
Повторный вызов подпрограммы будет возможен только после того, как она выполнит команду retf и драйвер завершит обработку предыдущего события. Это упрощает структуру подпрограммы, но ограничивает время, в течение которого она может выполняться.