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


Вариант 14
;!SaveMemory = True

; Итоговое задание 3
; Вариант 14
; Многоцветное изображение со сжатием
;
; Формат сжатия:
; старшие 4 бита = цвет,
; младшие 4 бита = количество повторений - 1.
;
; Цвета в атрибуте AH:
; 0h = черный, 8h = серый, 9h = синий,
; Ah = зеленый, Bh = бирюзовый, Ch = красный,
; Dh = фиолетовый, Eh = желтый, Fh = белый.
;
; Размер изображения: 18 пикс. в ширину, 19 строк в высоту.
; Каждый пиксель дублируется по горизонтали.

MOV BX, 0200h

MOV BYTE PTR DS:[BX]+0, 0FFh
MOV BYTE PTR DS:[BX]+1, 0F1h
MOV BYTE PTR DS:[BX]+2, 0F7h
MOV BYTE PTR DS:[BX]+3, 081h
MOV BYTE PTR DS:[BX]+4, 0F7h
MOV BYTE PTR DS:[BX]+5, 0F7h
MOV BYTE PTR DS:[BX]+6, 081h
MOV BYTE PTR DS:[BX]+7, 0F7h
MOV BYTE PTR DS:[BX]+8, 0F6h
MOV BYTE PTR DS:[BX]+9, 0C0h
MOV BYTE PTR DS:[BX]+10, 081h
MOV BYTE PTR DS:[BX]+11, 0C0h
MOV BYTE PTR DS:[BX]+12, 0F6h
MOV BYTE PTR DS:[BX]+13, 0F4h
MOV BYTE PTR DS:[BX]+14, 0C2h
MOV BYTE PTR DS:[BX]+15, 081h
MOV BYTE PTR DS:[BX]+16, 0C2h
MOV BYTE PTR DS:[BX]+17, 0F4h
MOV BYTE PTR DS:[BX]+18, 0F3h
MOV BYTE PTR DS:[BX]+19, 0C3h
MOV BYTE PTR DS:[BX]+20, 081h
MOV BYTE PTR DS:[BX]+21, 0C3h
MOV BYTE PTR DS:[BX]+22, 0F3h
MOV BYTE PTR DS:[BX]+23, 0F2h
MOV BYTE PTR DS:[BX]+24, 0C8h
MOV BYTE PTR DS:[BX]+25, 0E0h
MOV BYTE PTR DS:[BX]+26, 0C1h
MOV BYTE PTR DS:[BX]+27, 0F2h
MOV BYTE PTR DS:[BX]+28, 082h
MOV BYTE PTR DS:[BX]+29, 0C9h
MOV BYTE PTR DS:[BX]+30, 0E0h
MOV BYTE PTR DS:[BX]+31, 0C0h
MOV BYTE PTR DS:[BX]+32, 082h
MOV BYTE PTR DS:[BX]+33, 081h
MOV BYTE PTR DS:[BX]+34, 0CAh
MOV BYTE PTR DS:[BX]+35, 0E0h
MOV BYTE PTR DS:[BX]+36, 0C1h
MOV BYTE PTR DS:[BX]+37, 081h
MOV BYTE PTR DS:[BX]+38, 081h
MOV BYTE PTR DS:[BX]+39, 0C1h
MOV BYTE PTR DS:[BX]+40, 002h
MOV BYTE PTR DS:[BX]+41, 0C2h
MOV BYTE PTR DS:[BX]+42, 002h
MOV BYTE PTR DS:[BX]+43, 0E0h
MOV BYTE PTR DS:[BX]+44, 0C1h
MOV BYTE PTR DS:[BX]+45, 081h
MOV BYTE PTR DS:[BX]+46, 080h
MOV BYTE PTR DS:[BX]+47, 0C2h
MOV BYTE PTR DS:[BX]+48, 002h
MOV BYTE PTR DS:[BX]+49, 0C2h
MOV BYTE PTR DS:[BX]+50, 002h
MOV BYTE PTR DS:[BX]+51, 0E0h
MOV BYTE PTR DS:[BX]+52, 0C2h
MOV BYTE PTR DS:[BX]+53, 080h
MOV BYTE PTR DS:[BX]+54, 080h
MOV BYTE PTR DS:[BX]+55, 0CFh
MOV BYTE PTR DS:[BX]+56, 080h
MOV BYTE PTR DS:[BX]+57, 0F0h
MOV BYTE PTR DS:[BX]+58, 0C3h
MOV BYTE PTR DS:[BX]+59, 000h
MOV BYTE PTR DS:[BX]+60, 0E0h
MOV BYTE PTR DS:[BX]+61, 0C3h
MOV BYTE PTR DS:[BX]+62, 000h
MOV BYTE PTR DS:[BX]+63, 0E0h
MOV BYTE PTR DS:[BX]+64, 0C3h
MOV BYTE PTR DS:[BX]+65, 0F0h
MOV BYTE PTR DS:[BX]+66, 0F1h
MOV BYTE PTR DS:[BX]+67, 0C2h
MOV BYTE PTR DS:[BX]+68, 001h
MOV BYTE PTR DS:[BX]+69, 0C3h
MOV BYTE PTR DS:[BX]+70, 001h
MOV BYTE PTR DS:[BX]+71, 0C2h
MOV BYTE PTR DS:[BX]+72, 0F1h
MOV BYTE PTR DS:[BX]+73, 0F2h
MOV BYTE PTR DS:[BX]+74, 0CBh
MOV BYTE PTR DS:[BX]+75, 0F2h
MOV BYTE PTR DS:[BX]+76, 0F2h
MOV BYTE PTR DS:[BX]+77, 0C3h
MOV BYTE PTR DS:[BX]+78, 003h
MOV BYTE PTR DS:[BX]+79, 0C3h
MOV BYTE PTR DS:[BX]+80, 0F2h
MOV BYTE PTR DS:[BX]+81, 0F3h
MOV BYTE PTR DS:[BX]+82, 0C9h
MOV BYTE PTR DS:[BX]+83, 0F3h
MOV BYTE PTR DS:[BX]+84, 0F5h
MOV BYTE PTR DS:[BX]+85, 0C5h
MOV BYTE PTR DS:[BX]+86, 0F5h
MOV BYTE PTR DS:[BX]+87, 0FFh
MOV BYTE PTR DS:[BX]+88, 0F1h

MOV SI, 0200h

MOV DI, 0F600h
ADD DI, 8

MOV DH, 19

row_loop:
    CMP DH, 0
    JE done

    MOV CH, 18

run_loop:
    MOV BH, DS:[SI]
    INC SI

    MOV AH, BH
    SHR AH, 1
    SHR AH, 1
    SHR AH, 1
    SHR AH, 1

    MOV CL, BH
    AND CL, 0Fh
    INC CL

draw_run:
    CALL draw_pixel

    DEC CH
    DEC CL
    JNZ draw_run

    CMP CH, 0
    JNZ run_loop

    ADD DI, 56

    DEC DH
    JMP row_loop

draw_pixel:
    MOV AL, 0DBh

    MOV ES:[DI], AX
    ADD DI, 2

    MOV ES:[DI], AX
    ADD DI, 2

    RET

done:
    HLT