anyline: | mov | es: [di] , al | запись кода точки в видеобуфер |
add | di, bx | коррекция текущего адреса | |
jnc | @F | -> адрес в пределах окна | |
call | NxtWin | установка следующего окна | |
@@: | loop | anyline | управление повторами цикла |
ret | возврат из подпрограммы |
При рисовании гладких линий использовать операцию stosb для записи кодов точек в видеопамять нецелесообразно.
Давайте разберемся, что именно можно нарисовать с помощью подпрограммы, 3.11. Обозначим константу переадресации, значение которой записывался в Регистр bх' буквой и и условимся, что она может быть только по-жптельным числом Вспомните табл. 3.3 — положительные приращения адресов смежных точек могут иметь четыре значения: i, Horsize, Horsize+i HorSize-i. Если в качестве константы k использовать эти значения, то соответственно будут нарисованы горизонтальная, вертикальная и две наклонные прямые. Последние являются диагоналями квадрата, сторона которого содержит количество точек, указанное в регистре сх.
Подпрограмма 3.11 позволяет рисовать пунктирные линии. Например, если
задавать k=2, k=2*Horsize, k=2*(Horsize+1) И k=2*(Horsize-1), TO будут нари-
сованы пунктирные линии, у которых расстояние между соседними точками равно 2. Однако такая возможность является побочным эффектом и не представляет особого интереса.
Если вам часто приходится рисовать вертикальные линии, то сделайте копию примера 3.11, замените в ней команду add di, bx на add di, Horsize и подберите подходящее имя подпрограммы (не забудьте указать его в команде loop).