Загрузка данных
Вариант 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