-
Rysowanie linii po przekatnej
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:
<code>
format MZ
stack stk:256
entry codseg:main
VideoB_Seg EQU 0A000h; Okre˜lenie 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
; Wywoˆanie 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 warto˜ci rejestru BP na stosie
; okre˜lenie wsp˘ˆrz©dnych pixel'a i obliczenie jego adresu
mov ax,100; okre˜lenie wsp˘ˆrz©dnej Y pixel'a
mov bx,320; okre˜lenie 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 ilo˜ci 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©
; obsˆuga rejestr˘w kontrolera graficznego
mov dx,3CEh; zadanie adresu portu kontrolera graficznego
mov al,8 ; okre˜lenie numeru rejestru bitowej maski
out dx,ax ; zmiana rejestru maski bitowej
mov ax,0005h;
out dx,ax ; zadanie warto˜ci rejestru trybu
mov ah,0 ;
mov al,3 ;
out dx,ax ; zadanie warto˜ci rejestru cyklicznego przesuni©cia
mov ax,0C00h;
out dx,ax ; zadanie warto˜ci rejestru ustawi†/resetowa†
mov ax,0F01h;
out dx,ax ; zadanie warto˜ci rejestru ustawi†/resetowa†
; zmiana warto˜ci pixel'a
or [es:bx],al;
pop bp
ret
</code>
-
podpowiedź apropos rysowania przekątnej: spróbuj algorytmem Bresenhama
Zasady Postowania
- Nie możesz zakładać nowych tematów
- Nie możesz pisać wiadomości
- Nie możesz dodawać załączników
- Nie możesz edytować swoich postów
-
Forum Rules