Для определения адреса начала следующей строки мы прибавляли к текущему адресу видеопамяти константу коррекции, которая вычисляет подпрограмма caiioffs (см. пример 7.13) по формуле (horsize - widthrect) *bytppnt. В данном случае нас интересует адрес предыдущей строки, поэтому формулу для вычисления константы коррекции надо записать в виде (horsize + widthrect} *bytppnt и вычитать вычисленное значение из текущего адреса видеопамяти.
Объясним, почему так, а не иначе. В процессе построения строки исходный адрес видеопамяти увеличивается на widthrect*bytppnt байтов. Если текущий адрес видеопамяти уменьшить на эту величину, то получится адрес начала построенной строки. А если адрес начала текущей строки уменьшить на величину bperiine (horsize*bytppnt), то получится адрес начала предыдущей строки (см. табл. 7.4).
Есть два способа вычисления нужной нам величины. Можно составить вариант подпрограммы caiioffs, в котором вычитание заменено сложением. А можно ничего не изменять в caiioffs, но перед ее вызовом указывать в регистре dx отрицательное значение переменной widthrect (ширина рисунка). Мы используем второй способ.