Загрузка данных


mov si,0
mov di,0F600h

mov dh,20              ; 20 строк

row_loop:
    cmp dh,0
    je done

    mov ch,22          ; 22 пикселя в строке

run_loop:

    ; конец массива данных
    cmp si,69
    jae done

    mov bh,[bx+si]
    inc si

    ; цвет = старшие 4 бита
    mov ah,bh
    shr ah,4

    cmp ah,0
    je color_white

    cmp ah,1
    je color_black

    cmp ah,2
    je color_red

    mov dl,0Eh
    jmp get_count

color_white:
    mov dl,0Fh
    jmp get_count

color_black:
    mov dl,00h
    jmp get_count

color_red:
    mov dl,04h

get_count:

    ; количество = младшие 4 бита
    mov bl,bh
    and bl,0Fh
    inc bl             ; убрать если не k-1

draw_run:

    mov al,20h
    mov ah,dl

    ; рисуем пиксель два раза
    mov [di],ax
    add di,2

    mov [di],ax
    add di,2

    dec ch             ; осталось в строке
    dec bl             ; осталось в серии

    cmp ch,0
    je next_row

    cmp bl,0
    jne draw_run

    jmp run_loop

next_row:

    ; пропуск до начала следующей строки
    mov cx,18

blank_loop:

    mov word ptr [di],0020h
    add di,2

    mov word ptr [di],0020h
    add di,2

    loop blank_loop

    dec dh
    jmp row_loop

done:
    hlt