drawing: PushReg <di,si,bx,ex,gs,Cur_win>; сохранение в стеке
call calloffs вычисление константы offsline
mov gs, GenSeg gs = сегмент таблицы цветов
drwout: push ex сохраняем счетчик повторов
mov . ex, dx задаем размер строки рисунка
call drawline построение очередной строки
pop ex восстанавливаем счетчик повторов
add di, bx коррекция адреса видеопамяти
jnc @F -> адрес в пределах сегмента
call NxtWin установка следующего окна
@@: loop drwout ; управление повторами цикла
PopReg <Cur win,gs,cx,bx,si,di>; восстановление из стека
call setwin ; восстановление исходного окна
ret ; возврат из подпрограммы
Если вы сравните тексты примеров 3.21 и 7.23, то обнаружите, что они различаются только второй и третьей командами, а в списках параметров макровызовов PushReg и PopReg в примере 7.23 добавился регистр gs. Ну и, конечно же, имя drawiine относится к двум разным подпрограммам.