Delinfo : PushReg <Cur win, ax , ex, si, di, fs>; сохранение в стеке
call setwin установка исходного окна
mov di, Inflino di = адрес начала информ. строки
mov fs, GenSeg fs = сегмент общего назначения
xor si, si si = смещение в GenSeg (0)
mov ax, horsize ах = ширина экрана
mul byte ptr hsymh ) умножаем ее на высоту символа
mov ex , ax копируем результат в сх
shr ex, 02 и уменьшаем его в 4 раза
Dellp: movs dword prr [di fs:[si]; копирование двойного слова
or di, di адрес в пределах видеосегмента ?
jne @F -> да, переход на команду loop
В примере 5.22 данные пересылаются из оперативной в видеопамять, что и объясняет все различия текстов примеров 5.21 и 5.22. Цикл пересылки, практически, повторяет анапогичный цикл из примера 3.15 с той разницей, что копируются не байты, а двойные слова. Подразумевается, что регистр es содержит код видеосегмента, указанный в переменной vbuff.
Замечание 1
Замечание 1
При компиляции инструкции movs в том виде, как она записана в примерах 5.21 и 5.22, Макроассемблер MASM 5.1 выдает предупреждающее сообщение, но генерирует правильный код. На это сообщение можно не обращать внимание.
Подпрограммы примеров 5.21 и 5.22 рассчитаны на общий случай, когда информационная строка занимает всю ширину рабочей области экрана, но может начинаться с любой строки и располагаться в двух смежных окнах видеопамяти. В частных случаях их можно упростить и ускорить пересылку.