Код: Выделить всё
.model small
.data
table db 128,64,32,16,8,4,2,1
var_x equ 320 ;x
var_y equ 200 ;y
var_color equ 00000110b ;color
var_heigth equ 40
var_width equ 20
var_string_length equ 80
.code
start:
mov ax,@data
mov ds,ax
mov ax,12h ;инициализация графического
int 10h ;режима VGA: 640x480
MOV AX,0A000H ;указываем на видеобуфер
MOV ES,AX ;
MOV BX,0 ;смещение
; сбросим маску
MOV DX,3CEH ;указываем на адресный регистр
MOV AL,8 ;номер регистра
OUT DX,AL ;посылаем его
INC DX ;указываем на регистр данных
MOV AL,0FFH ;маска
OUT DX,AL ;посылаем данные
; чистим текущее содержимое задвижки
MOV AL,0
MOV ES:[BX],AL ;чистим задвижку
; установка регистра маски карты для желтого цвета
MOV DX,3C4H ;указываем на адресный регистр
MOV AL,2 ;индекс регистра маски карты
OUT DX,AL ;установка адреса
INC DX ;указываем на регистр данных
MOV AL,var_color ;код цвета
OUT DX,AL ;посылаем код цвета
; рисуем
mov ax,var_y ; y
mov bx,var_x ; x
mov dx,bx ;
mov cl,3
shr bx,cl ; bx = x/8
and dx,03h ; в dx - битовое смещение
mov cl,4
sal ax,cl ; ax = y*16
add bx,ax ; bx = x/8 + y*16
mov cl,2
sal ax,cl ; ax = y*64
add bx,ax ; в bx = x/8 + y*16 + y*64 = x/8 + y*80 - байтовое смещение
mov si,dx
mov al,table+[si] ; в al - маска
MOV ES:[BX],AL ;выводим точку
;---маскируем все биты, кроме восьмого
MOV DX,3CEH ;указываем на адресный регистр
MOV AL,8 ;номер регистра
OUT DX,AL ;посылаем его
INC DX ;указываем на регистр данных
MOV AL,80H ;маска
OUT DX,AL ;посылаем данные
MOV CX,var_heigth
;-------------------------------------------------
lbl_vertical_lines:
MOV ES:[BX],AL
ADD BX,var_string_length ;переводим на следующую строку (+80 байт)
loop lbl_vertical_lines
;------------------------------------------------
xor ax,ax ;ожидание нажатия клавиши
int 16h
mov ax,4c00h ;выход из графики с возвратом
int 21h ;в предыдущий режим
end start