BmpShow: lea bx, mode_8 ; bx = адрес подпрограммы mode_8
cmp bitcnt, 08 ; bitcnt = 8 ?
je @F ; -> да, переход на локальную метку
lea bx, mode_4 bx = адрес подпрограммы mode_4
cmp bitcnt, 04 bitcnt = 4 ?
je @F -> да, переход на локальную метку
lea bx, mode__2 bx = адрес подпрограммы mode_2
@@: mov ax, fwidth ax = fwidth, размер строки в файле
mul iheight dx:ax = fwidth*iheight
or dx, dx образ рисунка помещается в сегменте ?
jne @F -> нет, файл большого размера
mov si, ax si = размер образа рисунка
jmp Smlbmp переход на Smlbmp
@@: jmp BigBmp переход на BigBmp
Для того чтобы выполняемые в примере А. 11 действия имели смысл, в текстах примеров А.9 и А.10 надо заменить call drawiine на call bx, как указано в комментарии. Первые 7 команд примера А. 11 формируют в bх адрес подпрограммы обработки строки (примеры А.12—А.14), в зависимости от размера кода точки образа рисунка. После этого вычисляется размер образа рисунка, и если он помещается в одном сегменте (dx=o), то выбирается подпрограмма Smlbmp, в противном случае BigBmp.
Таким образом, для построения рисунка формата BMP задача должна обращаться к процедуре BmpShow, как к подпрограмме. Перед ее вызовом в регистре di указывается адрес левого верхнего угла рисунка в видеопамяти и устанавливается окно, которому принадлежит этот адрес. Регистр es должен содержать код видеосегмента (хранящийся в vbuff).