Part_3: xor cl, cl ; cl = 0, значение константы сдвига
add ax, 03 ; ax = ax + 3 (ax содержит iwidth)
and al, OFCh очищаем 2 младших разряда ах
cmp bitcnt, 08 bitcnt = 8 ?
je @F -> да, переход на локальную метку @@
add ах, 04 ах = ах + 4
and al, OF8h очищаем 3 младших разряда ах
inc cl cl = 1, значение константы сдвига
cmp bitcnt, 04 bitcnt = 4 ?
je @F -> да, переход на локальную метку @@
add ax, 18h ах = ах + 24
and al, OEOh очищаем 5 младших разрядов ах
mov cl, 03 cl = 3, значение константы сдвига
?: mov bx, ax bx = ах (округленное значение iwidth)
sub bx, iwidth bx = bx — \width
Рисунок не помещается па экране. Вполне вероятно, что размеры (или один из размеров) рисунка превышают размеры рабочей области экрана, соответ-ствующие установленному видеорежиму. В таких случаях возможны, по крайней мере, три варианта действий, не считая отказа от построения рисунка:
двух первых случаях на экране будет видна только часть, а в третьем случае — все изображение, если удастся подобрать подходящий видеорежим. Наиболее универсален второй способ, но для получения всех его преиму-щecTB в задачу надо включить механизм перемещения области видеопамяти, отображаемой на экране. В приложениях для Windows таким механизмом являются горизонтальный и вертикальный "лифты".
Изменять установленный видеорежим или его характеристики в описывае-мой здесь подпрограмме не целесообразно, это надо делать на более высоком уровне. Если же вас устраивает построение части рисунка, размер кото-рой зависит от установленного видеорежима, то в данной подпрограмме можно Принудительно изменитьЬ значения iwidth и iheight.