Программу можно назвать моделью процесса АЦП. Главная программа постоянно вычисляет значения заданной функции F(x) при переменном аргументе, что имитирует непрерывный сигнал, а обработчик прерывания 8 имитирует преобразователь с постоянным шагом дискретизации по времени. Перед началом работы канал 0 таймера программируется на частоту в 2 рази большую обычной (записью в порт 43h управляющего байта 00110110b=36h, а потом посылкой в порт 40h нового значения коэффициента деления), таким образом, «частота дискретизации» составляет около 36.4 Гц. При поступлении следующего прерывания запоминается текущее значение функции F(x), старый обработчик прерывания oldtime вызывается не при кожному прерывании, а лишь один раз из двух (переменная kf — счетчик по модулю 2), когда oldtime не вызывается, наш обработчик сам сбрасывает контроллер прерываний посылкой значения 20h в порт 20h. После набора 100 «показаний АЦП» восстанавливается старый вектор обработчика таймера, а результат аналого-цифрового преобразование выводится на терминал в графическом режиме в виде решетчатой функции.
Функция readvect() читает вектор заданного прерывания. Для чтения вектора применяется функция 35h DOS (прерывания 21h):
Вход: AH = 35h;
AL = номер вектора прерывания.
Выход: ES:BX = адрес программы обработки прерывания.
Функция writevect() устанавливает новый вектор прерывания по заданному адресу. Для записи вектора применяется функция 25h DOS:
Вход: AH = 25h;
AL = номер вектора прерывания;
DS:BX = 4-байтный адрес нового обработчика прерывания.