Напишу самое общее, потому как код примитивный.
Самая простая функция - putpixel
proc putpixel uses es di bx ax cx,\
x,y, color
написано что из ресурсов используется.
es - сегментный регистр
di - destination -регистр приёмник
вместе с ES образуют пару ES:DI, позволяющуюю адресовать 32х битный адрес
ax,bx,cx - рабочие регистры процессора, имеющие ещё предопределённые назначения:
ax - аккумулятор - сюда помещается результат вычислений.
bx - база(смещение) используется для косвенной адресации по базе
cx - счётчик
x,y,color - пользовательские параметры, определённые программой
mov ax, $A000
mov es, ax
инициализация сегмента приемника данных
mov al, byte[y]
mov cx, 320
mul cx
координата y (1 байт) умножается на количество пикселей в строке - получаем смещение для номера необходимой для вывода строки. Результат в AX.
mov di, ax
копируем в регистр приёмника
add di, [x]
к полученному смещению начала строки прибавляем координату x.
теперь в DI - смещение нужного пикселя относительно начала экранной области
mov al, byte[color]
mov [es:di], al
требуемый цвет пикселя выводим в заготовленный полный адрес.
Подрограммы рисования линий отличаются только тем, что занимаются вычислением координат для рисования (подготовка входной информации для putpixel и drawHorLine). Работа с входными параметрами - аналогична у всех.
Эээ.. drawCircleSIm - окружность.
а дальше да, типа того.
просто окружность и круг могут быть разных цветов - то что в вашем исходнике комментировано как "Mode_NoBorder".