[asm] Potrzebuje prosciutki kod do graf. Pomocy! Bardzo piln

0

Tak jak w temacie, potrzebuje prosciutki kod napisany w assemblerze, cos w stylu poruszajacego sie pixela po ekranie (moze byc w jedna strone) to ma byc naprawde coś prostego. Tylko bardzo prosze o doklady opis co robi konkretny wierszyk kodu.

A teraz zdradze na co mi to jest porzebne - na zaliczenie :)
Wiec bardzo prosze o te kilka linijek kodu z opisem.

0
mov ax,13h ; nr trybu (19)+ nr funkcji (0)
int 10h ; ustawienie trybu
mov cx,320 ; no klasyk cx słuzy jako counter dla loopa i innych
@1: ; petla
 mov bx,0a000h ; segment obrazu
 mov byte ptr [bx:cx],15 ; zapal pixel
 push cx ; zapamietaj licznik
 xor ah,ah ; funkcja 0
 int 19h ; odczyt czasu
 add dx,5 ; ustawienie opoznienia
 mov bx,dx ; zapamietaj opoznienie
 @2: ;petla
  xor ah,ah ; nr f-cji
  int 19h ; odczyt czsu
  cmp dx,bx ; porownaj
 jne @2 ; jeszcze raz jesli nierowne
 pop cx ; odtworz licznik
 mov byte ptr [bx:cx],0 ; zgas pixel
loop @1 ; skok do poczatku petli i cx=cx-1
xor ah,ah ; funkcja 0
int 16h ; odczyt znaku z klawiatury (czekaj)
mov ax,03h ; tryb text 80x25
int 10h ; ustawienie trybu

Tak jakos. Szkielet dla trybu rzeczywistego.

0

Dzieki flabra.
Ale przy kompilacji wypisuje takie bledy:


~^
#ERROR messages will be removed if you leave these first two lines in     @@@@#
.model tiny
.code
org 100h
start:

mov ax,13h ; nr trybu (19)+ nr funkcji (0)
int 10h ; ustawienie trybu
mov cx,320 ; no klasyk s słuzy jako counter dla loopa i innych
@1: ; petla
 mov bx,0a000h ; segment obrazu
 mov byte ptr [bx:cx],15 ; zapal pixel
~                   ^
#ERROR 39: Bad Index Register                                             @@@@#
 push cx ; zapamietaj licznik
 xor ah,ah ; funkcja 0
 int 19h ; odczyt czasu
 add dx,5 ; ustawienie opoznienia
 mov bx,dx ; zapamietaj opoznienie
 @2: ;petla
   xor ah,ah ; nr f-cji
   int 19h ; odczyt czsu
   cmp dx,bx ; porownaj
 jne @2 ; jeszcze raz jesli nierowne
 pop cx ; odtworz licznik
 mov byte ptr [bx:cx],0 ; zgas pixel
~                   ^
#ERROR 39: Bad Index Register                                             @@@@#
loop @1 ; skok do poczatku petli i cx=cx-1
xor ah,ah ; funkcja 0
int 16h ; odczyt znaku z klawiatury (czekaj)
mov ax,03h ; tryb text 80x25
int 10h ; ustawienie trybu

end start


Może być cos z procesami... strasznie mi głupio tak wypytywac, ale w asmie nie zbyt sie orientuje, dokładnie na zaliczenie powinienem coś napisac z efektem graficznym i co najwazniejsze wiedziec co z czym sie je, wiec postanowilem napisac tutaj.

Jeszcze raz dziekuje za wszelka pomoc.

0
.model tiny
.code
org 100h
start:

mov ax,13h ; nr trybu (19)+ nr funkcji (0)
int 10h ; ustawienie trybu
mov bx,319 ; counter - pozycja pixela
mov ax,0a000h ; segment obrazu
mov es,ax ; zaladuj do rej segmentowego
@1: ; petla
  mov byte ptr [es:bx],15 ; zapal pixel
  push bx ; zapamietaj licznik
  xor ah,ah ; funkcja 0
  int 1ah ; odczyt czasu
  add dx,5 ; ustawienie opoznienia
  mov bx,dx ; zapamietaj opoznienie
  @2: ;petla
    xor ah,ah ; nr f-cji
    int 1ah ; odczyt czasu
    cmp dx,bx ; porownaj
  jb @2 ; jeszcze nie? -> powtorka
  pop bx ; odtworz licznik
  mov byte ptr [es:bx],0 ; zgas pixel
  dec bx ; bx=bx-1
  cmp bx,0 ; ? bx=0
ja @1 ; skok do poczatku petli jesli bx>0
xor ah,ah ; funkcja 0
int 16h ; odczyt znaku z klawiatury (czekaj)
mov ax,03h ; tryb text 80x25
int 10h ; ustawienie trybu
mov ax,4c00h ; dos quit
int 21h ; cya

end start

Zapomniałem o kilku rzeczach, sorx.

  1. 19h to reboot, nie zegar (1ah - ups)
  2. bx nie moze byc uzyty jako segment
  3. a cx jako offset.

// teraz działa, choc mozna uzyc np. di zamiast bx w petli zewn. i wywalic pop/push

0

Super dziala!! :D

Tylko zabardzo nie reaguje na klawisze, tzn nie wylacza sie sam, ale moze sobie z tym poradze, gdybys jednak mial troche czasu to moze pomozesz mi jeszcze z tym szczegolikiem. Ale to jest super co napisales. Pozostaje mi tylko przeanalizowac wszystko po kolei.
DZUEKUJE ratujesz mi zycie :)

0

W symie wylaczenie działa. ale musi zakończyc pętle, a gdyby tak można było zakończyć w dowolnej chwili byłoby genialnie :-) Ale to co jest też jest dobre... Ale jeśli ktoś mógłby ten kod nieco zmodyfikować byłoby super.

0

eh , sam mogles sobie to dopisac, wystarczyłoby troche pomyslunku.

  ;...
  dec bx 
  mov ah,01h
  int 16h
  jnz @3
  cmp bx,0
ja @1
@3:
xor ah,ah
;...
0

Dzieki, masz u mnie [browar] :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.