Witajcie. mam taki problem gdyz mam zadany program ktory rysuje kropke na ekranie. mam go tak przerobic aby pobieral wspolzedne z bazy danych (zadeklarowac db z x i y) oraz zrobic druga wersje ktora rysuje linie na ekranie z tych kropek od lewego dolnego rogu do prawego gornego. kombinowalem na wszystkie mozliwe sposoby ale nie moge ani jednego ani drugiego zrobic. Bylbym wdzieczny za rady i pomoc.
Kod programu do przerobienia w FASM:
format MZ
stack stk:256
entry codseg:main
VideoB_Seg EQU 0A000h; Okrelenie segmentu buforu Video
;------------------ Segment danych ---------------------------
segment sdat use16
TSIM db 00h,0FFh,01h,02h,04h,08h,10h,20h,40h,80h
db 0FFh,00h,00h,00h
;--------------- Koniec segmentu danych ***
;----------------- Segment stosu -----------------------------
segment stk
db 256 dup (?)
;----------------- Koniec segmentu stosu
;----------------- Segment programu -------------------------
segment codseg use16
main: push ds
push bx
mov bx,sdat
mov ds,bx
; Wywoanie funkcji BIOS'u w celu zmiany trybu pracy monitora na graficzny
; mov ax,10h
mov ah,0
mov al,10h; Tryb 640 X 350 ilo† kolor˘w 16
int 10h
call AA
pop bx
pop ds
mov ah,1
int 21h
mov ax,0003h
int 10h
mov ah,1
int 21h
mov ax,4c00h
int 21h
ret
AA:
push bp ; Zachowanie wartoci rejestru BP na stosie
; okrelenie wsp˘rz©dnych pixel'a i obliczenie jego adresu
mov ax,100; okrelenie wsp˘rz©dnej Y pixel'a
mov bx,320; okrelenie wsp˘lrz©dnej X pixel'a
mov cl,bl ; mniej znaczĄcy bajt wsp˘rz©dnej X do BX
push dx
mov dx,80; wprowadznie do DX iloci blok˘w pixel'i w jednej linii
mul dx; (dx,ax)<-dx*ax
;przesuni©cie o AX 1-go bloku potrzebnej linii o wsp˘rz©dnej Y
pop dx
shr bx,1;
shr bx,1;
shr bx,1; przesuni©cie BX o trzy pozycje w prawo
add bx,ax; w BX znajduje si© przesuni©cie bloku,
; kt˘ry zawiera potrzebny pixel
mov ax,VideoB_Seg; adowanie do AX adresu segmentu buforu Video
mov es,ax; rejestr ES b©dzie zawiera adres segmentu buforu Video
and cl,7 ; wyodr©bnienie numeru pixel'a w bloku
xor cl,7 ; inwersja bitu
mov ah,1 ; przygotowanie maski bitu
shl ah,cl; przesuni©cie maski na odpowiedniĄ pozycj©
; obsuga rejestr˘w kontrolera graficznego
mov dx,3CEh; zadanie adresu portu kontrolera graficznego
mov al,8 ; okrelenie numeru rejestru bitowej maski
out dx,ax ; zmiana rejestru maski bitowej
mov ax,0005h;
out dx,ax ; zadanie wartoci rejestru trybu
mov ah,0 ;
mov al,3 ;
out dx,ax ; zadanie wartoci rejestru cyklicznego przesuni©cia
mov ax,0C00h;
out dx,ax ; zadanie wartoci rejestru ustawi†/resetowa†
mov ax,0F01h;
out dx,ax ; zadanie wartoci rejestru ustawi†/resetowa†
; zmiana wartoci pixel'a
or [es:bx],al;
pop bp
ret