Pokaż wyniki 1 do 2 z 2

Temat: Rysowanie linii po przekatnej

  1. #1

    Domyślnie 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&#169;dnych pixel'a i obliczenie jego adresu
    mov ax,100; okre˜lenie wsp˘ˆrz&#169;dnej Y pixel'a
    mov bx,320; okre˜lenie wsp˘lrz&#169;dnej X pixel'a
    mov cl,bl ; mniej znaczĄcy bajt wsp˘ˆrz&#169;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&#169;cie o AX 1-go bloku potrzebnej linii o wsp˘ˆrz&#169;dnej Y
    pop dx
    shr bx,1;
    shr bx,1;
    shr bx,1; przesuni&#169;cie BX o trzy pozycje w prawo
    add bx,ax; w BX znajduje si&#169; przesuni&#169;cie bloku,
    ; kt˘ry zawiera potrzebny pixel
    mov ax,VideoB_Seg; ˆadowanie do AX adresu segmentu buforu Video
    mov es,ax; rejestr ES b&#169;dzie zawieraˆ adres segmentu buforu Video
    and cl,7 ; wyodr&#169;bnienie numeru pixel'a w bloku
    xor cl,7 ; inwersja bitu
    mov ah,1 ; przygotowanie maski bitu
    shl ah,cl; przesuni&#169;cie maski na odpowiedniĄ pozycj&#169;
    ; 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&#169;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>

  2. #2

    Domyślnie

    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
  •  
Subskrybuj