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