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


mov si,0
mov di,0F600h

mov dh,20

row_loop:
    cmp dh,0
    je done

    mov ch,22

run_loop:

    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 cl,bh
    and cl,0Fh
    inc cl

draw_run:

    push ax

    mov al,20h
    mov ah,dl

    ; первый вывод пикселя
    mov [di],ax
    add di,2

    ; второй вывод пикселя
    mov [di],ax
    add di,2

    pop ax

    dec ch
    dec cl

    cmp ch,0
    jne test_cl

    ; переход на новую строку

    push cx
    push ax

    mov cx,18

    mov al,20h
    mov ah,00h

blank_loop:

    mov [di],ax
    add di,2

    mov [di],ax
    add di,2

    loop blank_loop

    pop ax
    pop cx

    mov ch,22
    dec dh

    cmp dh,0
    je done

test_cl:

    cmp cl,0
    jne draw_run

    jmp run_loop

done:
    hlt