Odpowiedz 
 
Ocena wątku:
  • 0 Głosów - 0 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Problem w TP i Asembler
Autor Wiadomość
Chucio Offline
Początkujący
*
Użytkownik

Liczba postów: 3
Dołączył: Mar 2010
Reputacja: 0
€: 6
OS:
Post: #1
Problem w TP i Asembler
Dobry,
sprawa wygląda tak...
Chciałem ostatnio przyśpieszyć mój program rysujący tło i zabrałem się za mozolne poznawanie składni Asemblera. Wszystko szło dość dobrze, ale do czasu... Dojechałem do przesuwania bitów w lewo i prawo (shl ah, 2) (shr al, 2) w systemie binarnym i po skompilowaniu mój Turbo Pascal 7 wywala mi błąd. Przeczytałem, że coś tam mu się nie podoba (286) i musze użyć dyrektywy globalnej {$G}, no i niestety, ale nie mam bladego pojęcia jak się jej używa. Owszem, jest napisane, że mamy {$G-} i {$G+}, ale gdzie to sie wstawia do kodu? Dość intuicyjnie wstawiłem pierwszy przed samym programem tak jak zmienne globalne, ale również dał błąd.
Czy ktoś mógłby to wyjaśnić? (W necie też szukałem, ale poza mało pomocnym wyjaśnieniem działania, niczego nie znalazłem)
21.03.2010 15:36
  Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post


nat__n Offline
Ekspert
*
Użytkownik

Liczba postów: 1456
Dołączył: May 2012
Reputacja: 38
€: 0
OS: Brak
Post: #2
RE: Problem w TP i Asembler
przeklej kod na forum, a przynajmniej do miejsca, gdzie musisz odwołać się do zmiennej globalnej
22.03.2010 13:26
  Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Chucio Offline
Początkujący
*
Użytkownik

Liczba postów: 3
Dołączył: Mar 2010
Reputacja: 0
€: 6
OS:
Post: #3
Video RE: Problem w TP i Asembler
Pożyczyłem dzisiaj książkę "Tworzenie gier 2d i 3d..." od znajomego. Pomijając fakt, że autor "jeździ trochę wyżej" ode mnie w Asemblerze, to jego kod także u mnie nie chodzi... Ciągle wywala mi błąd w tym miejscu. W książce autor tego nawet nie uwzględnia, przynajmniej nie zauważyłem.
Tutaj instrukcja rysująca poziomą kreskę o podanych współrzędnych. Zależy mi na tej metodzie, bo chce otrzymać maksymalną szybkość rysowania.
Kod:
Program poziom_w_13h;
Uses Crt;
Var
  x1,x2,y:word;
  kolor:byte;
Procedure pozioma_linia_13h(x1,x2,y:word; kolor:byte);
  Begin
    asm
    mov cx, x2 {zaladuj x2 do cx}
    sub cx, x1 {odejmij x1 od cx}
    add cx, 1  {w razie gdyby x1 = x2 zeby cokolwiek narysowac}
    mov ax, y  {zaladuj y do ax}
    mov di, ax {zaladuj ax do di}
    shl ax, 8  {przesuwamy bity w lewo o 8}{BŁĄD W TEJ LINIJCE, W NASTĘPNEJ TAKŻE BĘDZIE}
    shl di, 6  {przesuwamy bity w lewo o 6}
    add di, ax {dodaj ax do di}
    add di, x1 {dodaj x1 do di}
    mov ax, 0a000h  {A000 do ax}
    mov es, ax      {ax do es}
    mov al, kolor   {kolor do al}
    cld             {zerowanie znacznikow kierunku}
    rep stosb       {cx razy zapisanie koloru z al do komorek o wspolrzednych es:di}
    end;
  End;
Begin
randomize;
clrscr;
{tryb graficzny 13h}
asm
mov ah, 00h
mov al, 13h
int 10h
end;
{wartosci zmiennych}
x1:=10;
x2:=110;
y:=100;
kolor:=white;
g_rysuj_pionowa_linia_13h(x1,x2,y,kolor);
{wcisnij dowolny klawisz}
readkey;
End.
Error 159: 286/287 instructions are not enabled.
Gdzie wstawić tą {SG-} właśnie sam nie wiem, ale w tym miejscu mi wywala błąd.
Oczywiście tego programu także jeszcze do końca nie rozumiem, ale jak mówiłem - dopiero poznaję składnie.
Pozdrawiam
(Ten post był ostatnio modyfikowany: 22.03.2010 20:32 przez Chucio.)
22.03.2010 20:28
  Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Propagandi Offline
Początkujący
*
Użytkownik

Liczba postów: 91
Dołączył: Mar 2010
Reputacja: 8
€: 100
OS:
Post: #4
RE: Problem w TP i Asembler
Ten błąd dotyczy klasy procesora. W tym konkretnym przypadku niedostępne są instrukcje dla starszych, 16-bitowych modeli o oznaczeniu 286 i 287.
Jak odpalisz TP, to w menu Options-->Compiler zaznacz opcję "286 instuctions" i powinno ruszyć.
PS Jestem ciekaw co to za program, że musisz optymalizować kod z inline asm Tongues Jeśli to nie problem to upnij gdzieś cały projekt.
24.03.2010 15:58
  Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Chucio Offline
Początkujący
*
Użytkownik

Liczba postów: 3
Dołączył: Mar 2010
Reputacja: 0
€: 6
OS:
Post: #5
RE: Problem w TP i Asembler
Faktycznie ruszyło. ^^ Pięknie dziękuję! Co do tematu, to można go chyba uznać za zamknięty, chyba że ktoś chciałby się podpiąć ze swoim problemem.
PS Jeśli dojadę do czegoś wartego pokazania, to oczywiście wrzucę.
25.03.2010 19:35
  Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Odpowiedz 


Skocz do:


Użytkownicy przeglądający ten wątek: 3 gości

 Wybierz styl: