mov ax, 4F02h
mov bx, 0101h
int 10h
Ну вышел:
mov ax, 0003h
int 10h
А дальше что? Рисовать как?
mov ax, 4F02h
mov bx, 0101h
int 10h
mov ax, 0003h
int 10h
mov ah,4fh
mov al,05
mov bh,0
mov bl,0 ;номер окна
mov dx,si ;адрес окна в едницах шага шаг кратен размеру окна
int 10h
.MODEL SMALL
.STACK 100H
.DATA
windows db 0 ;deskriptor step winodw
x dw 150;The first coordinate on X |
y dw 100;The first coordinate on Y |Matrix of color from 0..20 on 20
x1 dw 170;the second coordinate for X |
y1 dw 120;the second coordinate for Y |
xx dw 0;Coordinates for a conclusion of a point
yy dw 0;
color dd 1h;color
deskr_buf dw 398;Quatity of points т/к/ есть разница 0 до 20 или 1 до 20
des_x db 20;descriptor X coord
des_y db 20;-=-=-=-=-=
image_buf dd 126 dup(00fff1ffh),147 dup(000000ffh),126 dup(00ff0001h);Bufer for color
.CODE
START:
.386
mov ax,@data;Adjust the data on segment
mov ds,ax;of the data
;------------------------------------------------
mov ax,4f02h;фунция VESA
mov bx,10fh;режим 320*200 16-милионов цветов
int 10h ;BIOS video interrupt
;
mov ax,0a000h;video memory adress
mov es,ax;init es for video memory
lea di,image_buf;адрес картинки в регистр DI
;------------------------------------------------------------------
mov ax,[x]
mov [xx],ax
mov ax,[y]
mov [yy],ax
new_pset: ;
cmp [deskr_buf],0;сравнение на ноль кончился ли массив
je end ;если кончислся то на конец программы
jmp matrix;на вывод матрицы
end: ;
call Wait_Key;ждем клавиши
call Exit;выходим
matrix: ;
mov eax,[di];получаем цвет
mov [color],eax;
call OutPixel;на вывод пикселя первый пиксель
mov bx,[x1]
cmp [xx],bx;сравниваем не кончилась ли координата ХХ
je a_x ;если больше то на модификацию
jmp no_ax;нет на вычеричивание по Х
a_x: ;
add di,4;меняем положение бегунка в буффере цвета
mov ax,[x];востанавливаем координату Х
mov [xx],ax;-=-=-=
inc [yy];увеличиваем У
dec [deskr_buf];уменьшаем дескриптор
jmp Out_P
no_ax: ;
inc [xx];увеличиваем Х
add di,4;меняем положение бегунка в буффере цвета
dec [deskr_buf];уменьшаем дескриптор буффера
;------------------------------------------------------------------
Out_P:
call OutPixel
jmp new_pset
;------------------------------------------------------------------
exit proc near
mov ah,4ch;
mov al,0; -EXIT to DOS;
int 21h;
exit endp;
OutPixel proc near
call mov_w0;всегда начинаем вывод с нулевого окна
mov ax,1280;1280 количество точек по X т/к/ цвет разме
;-щается в видео памяти в 32 расзрядах в 4 байтах
mul yy ;умножаем на У
jc corect;если переполнение то коректир
;============================================
shl xx,2 ;сдвиг влева корректир т/к/ 4 байта на цвет точки
add ax,xx;конечный результат сумма
adc dx,0
jc corect1;если переполнение то на корректировку
cmp dx,1
je corect1
mov si,ax;теперь адресуем видео память
;на полученый результат
out:
mov ebx,color;цвет
mov es:[si],ebx;ставим точку
shr xx,2 ;так как мы изменили Х то возвращаем его взад
jmp ex_t;выходим
corect:
shl xx,2 ;сдвиг на 2 умножаем на 4
add ax,xx;в ax конечный результат
adc dx,0
corect1:
mov si,ax;в si ax
cmp dx,2
je corect2
cmp dx,3
je corect2
not_cor:
call mov_w1;двигаем окно на 1 шаг
jmp out ;на вывод точки
corect2:
cmp dx,3
jz corect3
call mov_w2
jmp out
corect3:
call mov_w3
jmp out
ex_t:
ret ;выход из процедуры вывода точки
;обратно в Брезенхейм
OutPixel endp
mov_w0 proc near;movenay to window
mov ah,4fh;in step zero
mov al,05;62454
mov bh,0;---------
mov bl,0;---------
mov dx,0;переносим окно на один шаг
int 10h
mov windows,0
ret
mov_w0 endp
mov_w1 proc near
mov ah,4fh;
mov al,05;62454
mov bh,0;---------
mov bl,0;---------
mov dx,1;переносим окно на один шаг
int 10h
mov windows,1
ret
mov_w1 endp
mov_w2 proc near
mov ah,4fh;
mov al,05;62454
mov bh,0;---------
mov bl,0;---------
mov dx,2;переносим окно на один шаг
int 10h
mov windows,2
ret
mov_w2 endp
mov_w3 proc near
mov ah,4fh;
mov al,05;62454
mov bh,0;---------
mov bl,0;---------
mov dx,3;переносим окно на один шаг
int 10h
mov windows,3
ret
mov_w3 endp
wait_key proc near
mov ah,0
int 16h
ret
wait_key endp
END START
mov ax,0013h ;режимкоординаты точки расчиываюия так
int 10h
mov ax,0a000h ;адрес видеопамяти
mov es,ax
mov es:[si],bl ;es:[si] пара указывающая на видеопамять
; а SI индекс чтобы гулять по ней
.MODEL SMALL
.STACK 100H
.DATA
y_co dw 199
x_co dw 319
.CODE
START:
call _in_gr13h;init video memory and data
mov ax,320;
mul y_co;movenay Y
mov bx,ax;
add bx,x_co;movenay X
cmp dx,0
jne exit
xor ax,ax
mov al,4;Єа бл©
mov es:[bx],al
call _wait_key
exit:
call _exit_p
;-------------------------------------------
;-------------------------------------------
;-------------------------------------------
_in_gr13h proc near
mov ax,013h
int 10h
mov ax,0a000h
mov es,ax
xor ax,ax
mov ax,@data
mov ds,ax
xor ax,ax
ret
_in_gr13h endp
_wait_key proc near
mov ah,0
int 16h
ret
_wait_key endp
_exit_p proc near
mov ah,4ch;|\
mov al,0;| -EXIT to DOS;
int 21h ;|/
_exit_p endp
END START